django - django 中多个继承类的反比关系

标签 django django-models inheritance

这是我的原理图模型:

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 类型。

每个法案都应该指向一项法律 (表明该法案将更改哪条法律)我的问题是:实现这一点的最佳方法是什么?

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

另一种可能的解决方案是添加外键 到每个继承类 (这会给我一个 privatebill_set、governmentbill_set、futurebill_set),但这似乎很麻烦,因为我将依靠 future 的程序员来记住添加该关系。

你会如何解决这个问题?

最佳答案

也许你可以让你的 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

关于django - django 中多个继承类的反比关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2887408/

相关文章:

django - 查询集过滤器中使用的 EmptyQuerySet 上的 value_list 返回完整集

mysql - 如何在MySQL中临时禁用外键约束?

C++ 多继承顺序和虚函数

java - 为什么一个接口(interface)不能实现另一个接口(interface)?

python - 为什么聊天应用程序必须是异步的?

python - 如何恢复上次迁移?

django_rq 作业未添加到队列中

django - 如何使用 Django Rest Framework ReadOnlyModelViewSet 获取 "data"而不是 "results"?

python - 在 Django 模型的初始化方法中访问父字段

C++:虚拟指针的原型(prototype)