我希望从变量抽象基类继承到子类。因此,子类不必从预定义的基类继承,而是能够从多个基类的任何一个类继承。理想情况下,模型的设置如下:
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
交易可以从订单或费用继承,因为它们都可以是交易的来源。 可以实现通用外键以允许Orders模型和费用模型中的变量外键引用,但我很好奇是否有办法在不使用通用外键的情况下执行此操作。是否存在允许子类与变量抽象父类关联的特定排列,mixin,装饰器,属性或方法?
答案 0 :(得分:1)
不可能。但是,您可以通过从ForeignKey
到Transaction
和Fees
创建Order
现实主义来轻松实现您想要的目标。
答案 1 :(得分:0)
不,你不能这样做。 Django模型在运行时(在django初始化之后)不能像这样进行修改。无论如何,这不是一个好的设计模式。你混淆了构图和继承。 Transaction
不是Fee
的类型或Order
的类型,因此像这样子类是没有意义的。
只需使用两个单独的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)