Python Django模型:从变量抽象基类继承
我希望从变量抽象基类继承到子类。因此,子类不必从预定义的基类继承,而是能够从多个基类中的任何一个类继承。理想情况下,模型的设置如下:Python Django模型:从变量抽象基类继承,python,django,inheritance,django-models,model,Python,Django,Inheritance,Django Models,Model,我希望从变量抽象基类继承到子类。因此,子类不必从预定义的基类继承,而是能够从多个基类中的任何一个类继承。理想情况下,模型的设置如下: class Orders(models.Model): order_number = models.IntegerField() # Orders metrics class Meta: abstract = True class Fees(models.Model): fee_number = models.I
class Orders(models.Model):
order_number = models.IntegerField()
# Orders metrics
class Meta:
abstract = True
class Fees(models.Model):
fee_number = models.IntegerField()
# Fee metrics
class Meta:
abstract = True
class Transactions(Inherit from either Orders or Fees):
transaction_number = models.IntegerField()
# Transaction metrics
交易可以从订单或费用中继承,因为它们都可以是交易的来源。
可以实现通用外键,以允许订单模型和费用模型中的可变外键引用,但我想知道是否有一种方法可以在不使用通用外键的情况下实现这一点。是否存在允许子类与变量抽象父类关联的特定安排、mixin、decorator、属性或方法?这是不可能的。但是你想要的东西可以通过从
交易
到费用
和订单
建立外键
不,你不能这样做。Django模型在运行时不能这样修改(在Django初始化之后)。无论如何,这不是一个好的设计模式。你混淆了组合和继承。交易
不是一种费用
或一种订单
的类型,因此这样子类是没有意义的
只需使用两个单独的ForeignKey字段,即可解决问题,而无需使用通用外键:
class Transactions(models.Model):
transaction_number = models.IntegerField()
order = models.ForeignKey(Orders, null=True, blank=True)
fee = models.ForeignKey(Fees, null=True, blank=True)
然后,您可以按如下方式查询不同的交易类型:
fee_payments = Transactions.objects.exclude(fee=None)
order_payments = Transaction.objects.exclude(order=None)