Skip to main content
 首页 » 编程设计

python之唯一标识 Django 中的 ManyToMany 关系

2024年10月17日28oomusou

我正在尝试弄清楚如何最好地唯一标识我的 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) 

我为 countries 字段使用 ManyToManyField 类型,因为我想避免城市名称重复(即可能有一个像“Springfield”这样的城市名称出现在多个地点)。

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

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

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

请您参考如下方法:

我认为您关于through 表的想法是正确的方法。然后,我会将 unique_together('city', 'country') 添加到 Meta 中。

我认为不需要 AutoField