我试图找出如何最好地在我的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 回答
我认为你对
through
表的想法是正确的方法 . 然后,我会在Meta
中添加unique_together('city', 'country')
.我认为不需要
AutoField