54

我想对同一个模型有两个外键:

class Test(models.model):
    example1 = models.ForeignKey(Example)
    example2 = models.ForeignKey(Example)

我收到如下错误:

字段“example1”的访问器与相关字段“Example.test_set”冲突。将related_name 参数添加到“example1”的定义中。

4

4 回答 4

122

尝试使用related_name

class Test(models.model):
    example1 = models.ForeignKey('Example', related_name='example1')
    example2 = models.ForeignKey('Example', related_name='example2')
于 2009-02-12T21:35:53.293 回答
29

Django 使用一些 python 魔法来定义模型之间的关系,其中一些涉及在关系中使用模型的名称(这就是 'test__set' 中的 'test' 的来源。)我猜发生了什么,是它尝试将“test__set”两次放入示例模型中,一次用于您定义的每个外键。

错误消息建议尝试:定义一个related_name可以使用的参数(覆盖其中一个'test_set'),而不是自动生成两个冲突的名称。

更多信息在这里:页面已被删除

当前与模型关系相关的页面: https ://docs.djangoproject.com/en/2.0/ref/models/fields/#module-django.db.models.fields.related

于 2009-02-12T21:36:36.303 回答
8

只需按照错误消息告诉您的操作即可,如果您不确定这意味着什么,请查阅related_name.

于 2009-02-13T03:06:37.900 回答
4

在 django 2.0 中试试这个:

user = models.ForeignKey(User, on_delete=models.PROTECT, null=True,  related_name='user')
paper = models.ForeignKey(paperRecord, on_delete=models.PROTECT, null=True,  related_name='paper')
于 2018-07-23T20:27:59.633 回答