在Django中唯一标识ManyToMany关系

时间:2016-09-06 14:51:39

标签: python django orm

我正在试图弄清楚如何在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”,出现在多个位置)。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

我认为不需要AutoField