【问题标题】:Django, how to have an array in model without M2M?Django,如何在没有 M2M 的情况下在模型中有一个数组?
【发布时间】:2021-02-23 21:11:20
【问题描述】:

我希望我的模型有一组其他模型的实例。让我解释一下。

我有一个 Company 模型,它有一个 localizations 字段,它应该是一组地址/数组。由于一个地址只能用于一个Company,所以这里的M2M关系似乎是错误的。

Company 被删除时,它的所有localizations 也应该被删除。

我该如何做到这一点? (我不使用 Postgres)

【问题讨论】:

    标签: sql django django-models relational-database m2m


    【解决方案1】:

    在这种情况下,您需要ForeignKey(这是一个多对一的关系)。请看下面的代码:

    class Company(models.Model):
        ...
    
    class Address(models.Model):
         company = models.ForeignKey(Comapny, on_delete=models.CASCADE, related_name="localizations")
         address_line_1 = models.CharField(max_length=255, blank=False)
         # Other fields you want
         ...
    

    每个Address 指向一个Company 实例。但是对于Addresss 可以指向Company 的数量没有限制。从这个意义上说,一家公司“拥有”许多地址。

    related_name="localizations" 参数意味着您可以使用company.localizations 来获取指向该公司的Address 实例数组。

    最后,on_delete=models.CASCADE 表示如果你删除了一个Company 实例,那么指向它的Address 实例也将被删除。

    【讨论】:

    • 效率高吗?每次我想得到一些公司的地址时,我都需要通过公司查询。
    • 是的,这至少与您可以使用的任何其他方法一样有效。
    最近更新 更多