与django中多个继承类的反向关系

Ofr*_*viv 5 django inheritance django-models

这是我的原理图模型:

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
Run Code Online (Sandbox Code Playgroud)

有可能并且将来我(或许可能是其他人)想要添加更多Bill类型.

每一项法案都应该指出一项法律(表明该法案将改变哪些法律),我的问题是:实施这项法案的最佳方法什么?

如果我将Bill的ForeignKey(Law)添加到Bill中,我将从每个Bill到Law都有一个关系,但是一个Law只会与Bills(bill_set)有一个反比关系,而不是与每种类型的Bill都有不同的反比关系.当然,我将能够过滤每种类型的账单,只获得指向特定法律的账单,但这是我认为我需要经常使用的东西,所以我认为使用privatebill_set,governmentbill_set等会产生代码更具可读性.

另一种可能的解决方案是将外键添加到每个继承类中(这会给我一个privatebill_set,governmentbill_set,futurebill_set),但这看起来很毛茸茸,因为我会依赖未来的程序员来记住添加这种关系.

你怎么解决这个问题?

Ret*_*old 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
Run Code Online (Sandbox Code Playgroud)