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
。