【问题标题】:Uniquely identifying ManyToMany relationships in Django在 Django 中唯一标识多对多关系
【发布时间】:2016-09-06 14:51:39
【问题描述】:

我正在尝试找出如何最好地在我的 Django 应用程序中唯一标识多对多关系。我有类似于以下的模型:

class City(models.Model):
    name = models.CharField(max_length=255)
    countries = models.ManyToManyField('Country', blank=True)

class Country(models.Model):
    name = models.CharField(max_length=255)
    geo = models.ForeignKey('Geo', db_index=True)

class Geo(models.Model):
    name = models.CharField(max_length=255)

我在countries 字段中使用ManyToManyField 类型,因为我想避免城市名称重复(即,可能会有像“斯普林菲尔德”这样的城市名称出现在多个位置)。

在我的应用程序的另一个地方,我希望能够唯一标识城市-国家-地理关系。也就是说,我需要知道城市是“斯普林菲尔德”的用户居住在美国,而不是加拿大。因此,我需要知道我的城市映射到哪个ManyToManyField 关系。我的用户看起来像这样:

class MyUser(models.Model):
    # ... other fields ...
    city = models.ForeignKey('City', db_index=True, blank=True, null=True)

这种设置显然没有正确捕捉城市和国家之间的关系。捕捉独特关系的最佳方式是什么?我会使用自定义through-tableAutoField 作为键,并更改我的用户以指向该直通表吗?

【问题讨论】:

    标签: python django orm


    【解决方案1】:

    我认为您对through 表的想法是正确的方法。然后,我会在Meta 中添加一个unique_together('city', 'country')

    我认为不需要AutoField

    【讨论】:

    • geo 真的需要在直通表中吗?一个国家只能在一个地理区域,因此ForeignKey 参考。我觉得我可以通过简单的加入获得必要的地理信息......
    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多