django模型可以有两个抽象类吗?

django模型可以有两个抽象类吗?,django,django-models,abstract-class,billing,Django,Django Models,Abstract Class,Billing,我有以下型号: class BillHeader(models.Model): billno = models.IntegerField(primary_key=True, blank=True) class BillData(models.Model): price = models.DecimalField(_('Price'), max_digits=12, decimal_places=2) amount = models.DecimalField(_('Amo

我有以下型号:

class BillHeader(models.Model):
    billno = models.IntegerField(primary_key=True, blank=True)

class BillData(models.Model):
    price = models.DecimalField(_('Price'), max_digits=12, decimal_places=2)
    amount = models.DecimalField(_('Amount'), max_digits=6, decimal_places=2)

    [... rest of the model ...]

    class Meta:
        abstract = True

class BillFooter(models.Model):
    total = models.DecimalField(_('Total'), max_digits=12, decimal_places=2)

    [... rest of the model ...]

    class Meta:
        abstract = True
BillData
BillFooter
对于每个
BillHeader
都是通用的,所以我将它们标记为
abstract
。我可以做
类BillHeader(BillData,BillFooter)
还是我做错了什么


我还考虑过做主要的
BillData
BillHeader
BillFooter
摘要。我没有做数据模型的经验(至少不是复杂的),我有点迷路了。您推荐什么?

是的,Django模型可以从任意多个抽象基类继承,只要它们不会导致模棱两可的“模型解析顺序”。把继承看作一条链条。。。从中继承的每个类都是链中的一个链接。从两个基类继承只是向链添加两个链接,而不是一个链接

换句话说,如果您的抽象基类继承自
models.Model
,则不要尝试同时继承
Bill
类中的抽象基类和
models.Model
<代码>模型。模型已经在继承链中,因此从它继承会在基类链中造成混乱

至于如何构造这些类,我将创建一个名为
Bill
的模型,该模型继承自
BillHeader
BillData
BillFooter
。原因是我喜欢Django模型来表示离散对象(例如Bill、Article、BlogPost、Photo等)

然而,抽象基类的要点是能够向公共字段和方法添加抽象级别,以便多个类可以从它们继承。如果您只是创建一个Bill类,那么它有点毫无意义。然而,如果你有比尔,无报酬的比尔,还有支付的比尔。。。所有这些都会有公共字段,应该出现在所有这些字段上,通过抽象到ABC,您可以省去很多麻烦


希望这能让我们了解ABC和继承的好处。

+1了解关于离散对象的解释。然而,我仍然有一个疑问,如果我创建一个Bill类,它会是空的吗?我的意思是,没有字段,只继承ABC?它确实可以。您只需在类下缩进编写
pass