Osc*_*lal 3 django abstract-class billing django-models
我有这个型号:
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
Run Code Online (Sandbox Code Playgroud)
BillData并且BillFooter是共同的每BillHeader所以我将其标记为abstract.我能做什么class BillHeader(BillData, BillFooter)或者我做错了什么?
我也想过做BillData主要的,BillHeader BillFooter抽象的.我没有任何做数据模型的经验(至少不是复杂的模型)而且我有点迷失.你会推荐什么?
是的,Django模型可以从任意多的抽象基类继承,只要它们不会导致模糊的"模型解析顺序".将继承视为一个链......您继承的每个类都是链中的一个链接.从两个基类继承只是添加两个链接到链而不是一个.
换句话说,如果你的抽象基类继承models.Model,那么不要尝试从两个抽象基类继承,并 models.Model在你的Bill班级.models.Model已经在继承链中,因此继承它会导致基类链中的混乱.
至于如何我将构建这些类,我会创建一个名为模型Bill,从继承BillHeader,BillData和BillFooter.原因是我喜欢我的Django模型来表示离散对象(例如Bill,Article,BlogPost,Photo等)
但是,抽象基类的要点是能够为公共字段和方法添加抽象级别,以便多个类可以从它们继承.如果你只是创建一个比尔类,它有点无意义.但是,如果你有Bill,UnpaidBill和PaidBill ......所有这些都有共同字段应该出现在所有这些字段上,你可以通过抽象到ABC来节省很多麻烦.
希望这能为ABC和遗产的优点提供一点见解.
| 归档时间: |
|
| 查看次数: |
1601 次 |
| 最近记录: |