以下是我的原理图模型:
class Law(models.Model):
...
class Bill(models.Model):
... # data for a proposed law, or change of an existing law
class PrivateBill(Bill):
... # data for a Bill that was initiated by a parliament member
class GovernmentBill(Bill):
... # data for a Bill that was initiated by the government
将来我(或许是其他人)可能会想要添加更多的Bill类型。
每条法案都应该指向法律(表明该法案将改变哪些法律),我的问题是:实施此法案的最佳方式是什么? < / p>
如果我将外键(法律)添加到比尔,我将从每个比尔到法律都有关系,但法律只有反向关系票据(bill_set),与每种票据类型没有不同的反向关系。当然,我将能够过滤每种类型的账单,只获得指向特定法律的账单,但这是我认为我需要经常使用的东西,所以我认为使用privatebill_set,governmentbill_set等会产生代码更具可读性。
另一个可能的解决方案是将外键添加到每个继承类(这会给我一个privatebill_set,governmentbill_set,futurebill_set),但这看起来很毛茸茸,因为我会依赖未来的程序员记住要添加这种关系。
你会如何解决这个问题?
答案 0 :(得分:2)
也许你可以将你的Bill类抽象化,并按照以下方式进行:
class Bill(models.Model):
law = models.ForeignKey(Law, related_name="%(app_label)s_%(class)s_related")
class Meta:
abstract = True
class PrivateBill(Bill):
pass
class GovernmentBill(Bill):
pass
答案 1 :(得分:1)
Generic relations可能是这里的方式 - 它们允许你有一个类似于ForeignKey的结构,它指向任何其他模型。