Django在模型上具有相同关系的多个字段

时间:2019-03-26 17:40:40

标签: django django-models many-to-many

模型上是否可以多次存在相同的多对多关系(字段的字段名称不同)?在进行迁移时,我似乎无法使其正常工作,因为当我尝试将其复制为其他名称时,python抱怨已存在的关系。

我的模型当前如下所示:

class UserLocations(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    locations = models.ManyToManyField(Locations, related_name="users")

我想添加一个称为“电子邮件”的附加字段,该字段与“位置”字段相同。因此,我可以给它一个不同的相关名称吗?

2 个答案:

答案 0 :(得分:0)

是的,同一模型可以具有多个manytomany关系。反向访问都必须具有不同的related_name。像这样

class MyModel(models.Model):
    relation_a = models.ManyToManyField(AnotherModel, related_name='rev_relation_a')
    relation_b = models.ManyToManyField(AnotherModel, related_name='rev_relation_b')

这就是django抱怨的原因,因为您必须为两者明确定义单独的相关名称。

答案 1 :(得分:0)

以您的示例为例,

class UserLocations(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    locations = models.ManyToManyField(Locations, related_name="locations")
    more_locations = models.ManyToManyField(Locations, related_name="more_locations")

此处有更多信息:https://docs.djangoproject.com/en/2.1/topics/db/models/#be-careful-with-related-name-and-related-query-name