python - Django 中唯一标识多对多关系

标签 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)

我对 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

关于python - Django 中唯一标识多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39352019/

相关文章:

node.js - sequelize "findbyid"不是一个函数,但显然 "findAll"是

java - 如何在 hibernate 中限制对象属性中的集合?

python - 在 django admin 中动态设置 readonly_fields

mysql - 面向多个用户的 Django 数据库架构设计

django - 在 Dreamhost 和 Passenger WSGI 上为 Django 设置环境变量

orm - 在使用 CF-ORM 的 ColdFusion 9 中需要注意的事项

python - 有什么方法可以在 Python 中对变量 id/符号进行字符串化?

python - Flask Principal 粒度资源按需

python - 确定取消的 MessageBox 案例?

python - Python 中的二进制线性规划求解器