可以与两个父母相关联的 Django 模型

Posted

技术标签:

【中文标题】可以与两个父母相关联的 Django 模型【英文标题】:Django model which could be associated with two parents 【发布时间】:2017-02-03 18:08:32 【问题描述】:

我在 Django 中有一个模型,我认为它需要与两个父母相关联,但我正在尝试弄清楚如何对其进行编码。

主要问题是我们有Building 模型与Headquarter 链接。每个Headquarter 通常都有一个ElectricSupply 为所有总部大楼供电,但也有可能每个Building 可以有自己的ElectricSupply

此外,每个ElectricSupply 都与一个或多个ElectricBill 模型相关联,这些模型按月存储。

所以,不管是从指挥部还是每栋楼,我最终都必须能够得到Headquarter的用电量。

class Headquarter(models.Model):
    # ...
    def get_consumption(self):
        # Here I need to know where to look for the supply

class Building(models.Model):
    # ...
    headquarter = models.ForeignKey(Headquarter, related_name='buildings')

class ElectricSupply(models.Model):
    # Here I don't know where to point, Headquarter or Building, or both?

class ElectricBill(models.Model):
    # ...
    supply = models.ForeignKey(ElectricSupply, related_name='bills')

希望你能帮助我。谢谢。

【问题讨论】:

【参考方案1】:

我认为每个建筑物都应该有 ElectricSupply,所以你应该从 ElectricSupply 指向 Building,然后如果你想找到 Headquarter,你可以很容易地从 Building 那里得到它,在那里你也有指向 Headquarted 的外键。另外我认为每个建筑物都应该与 ElectricBill 有关系,因此您应该将 ElectricBill 中的外键更改为指向 Building。

【讨论】:

现在就是这样,但这里的问题是,当所有建筑物的 ElectricSupply 相同时,我没有计算在内。我的意思是,例如,我有 3 个建筑物,但只有一个 ElectricSupply,所以我需要将它指向一个建筑物,而将其他建筑物留空。所以,这是错误的,这就是总部模型有意义的地方...... 为什么会出错?将建筑物和总部的外键设置为 null=true 好的,你的意思是将ElectricSupply链接到BuildingHeadquarter,并将ForeignKeys设置为null=True。我想知道 Django 中是否有一种方法可以使用唯一列(唯一属性)来指向不同的模型或类似的东西,这可能会更优雅一些……但如果没有,是的,那听起来不错也是。

以上是关于可以与两个父母相关联的 Django 模型的主要内容,如果未能解决你的问题,请参考以下文章

将用户与帖子 Django 和 MySQL 相关联

两个相关模型的 Django 查询

Django 权限取决于模型?

与祖父母相关的 CSS 宽度百分比

为 Django 模型自动填充外键

Rails - 如何让两个用户 ID 与模型相关联