当前位置:  开发笔记 > 后端 > 正文

fields.E304 Django中的反向访问器冲突

如何解决《fields.E304Django中的反向访问器冲突》经验,为你挑选了1个好方法。

我正在尝试迁移这两个模型:

# models.py

from django.db import models


class Person(models.Model):
    name = models.CharField(max_length=64)


class Person2Person(models.Model):
    person = models.ForeignKey(Person)
    friend = models.ForeignKey(Person)

但我有这个错误:

SystemCheckError: System check identified some issues:

ERRORS:
website.Person2Person.friend: (fields.E304) Reverse accessor for 'Person2Person.friend' clashes with reverse accessor for 'Person2Person.person'.
    HINT: Add or change a related_name argument to the definition for 'Person2Person.friend' or 'Person2Person.person'.
website.Person2Person.person: (fields.E304) Reverse accessor for 'Person2Person.person' clashes with reverse accessor for 'Person2Person.friend'.
    HINT: Add or change a related_name argument to the definition for 'Person2Person.person' or 'Person2Person.friend'.

我想在模型中建立多对多的关系Person.为什么我的代码错了?我该如何解决?



1> RemcoGerlich..:

代码是错误的,因为Person将获得与Person2Person.person以及Person2Person.friend的反向关系; 默认名称为Person.person2person_set,但Django不能为两者使用相同的名称.

所以你可以设置一个related_name或两个:

class Person2Person(models.Model):
    person = models.ForeignKey(Person, related_name='person2persons')
    friend = models.ForeignKey(Person, related_name='friends')

现在Person.friends与Person2Person对象相关,Person2Person对象将此Person作为朋友,Person.person2person与具有此Person作为人的对象相关.

但是,为什么不在'self'Person上使用ManyToManyField ?


是的,related_name ='+'
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有