首页 文章

在Django中唯一标识ManyToMany关系

提问于
浏览
2

我试图找出如何最好地在我的Django应用程序中唯一标识ManyToMany关系 . 我有类似以下的模型:

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)

我使用 ManyToManyField 类型作为 countries 字段,因为我想避免城市名称重复(即可能有多个位置出现的城市名称,如"Springfield") .

在我申请的另一个地方,我希望能够唯一地确定城市 - 国家 - 地理关系 . 也就是说,我需要知道其城市为"Springfield"的用户居住在美国,而不是加拿大 . 因此,我需要知道我的城市映射到哪个 ManyToManyField 关系 . 我的用户看起来像这样:

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

这种设置显然无法正确捕捉城市与国家之间的关系 . 捕捉独特关系的最佳方式是什么?我会使用自定义through-table并使用 AutoField 作为键,并将我的用户更改为指向通过表吗?

1 回答

  • 2

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

    我认为不需要 AutoField

相关问题