我正在try 迁移这两个型号:

# 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中建立一种多对多的关系.为什么我的代码错了?我该怎么修呢?

推荐答案

代码是错误的,因为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.friendPerson2Person个对象相关,其中Person是朋友,Person.person2person个是将此人作为人的对象.

However,你为什么不在Person上用ManyToManyField'self'

Django相关问答推荐

Django显示交叉表格

如何在Django中获取标记<;输入>;的';值';属性?

Django查询一个查询集的输入结果,以查找没有出现在另一个模型中的对象

为特定表行更新或创建

在Django ORM中引用非主外键

无法创建超级用户,因为 Django 中的一列(外键)不能为空

如何在 Django 模型中存储元组列表

相同的字符串不同的翻译

Django中的 联合(Union) 和相交(Intersect)

Django:想要将一个空字段显示为空白而不是显示无

Django-Registration:邮箱作为用户名

Django App 配置不当 - 应用程序模块有多个文件系统位置

带有消息判断的 Django/Python assertRaises

Django ALLOWED_HOSTS IP 范围

Python Django:您正在使用 staticfiles 应用程序而没有设置 STATIC_ROOT 设置

升级到 Django 1.8 后提供的固定默认值

获取 django 应用的绝对路径

Django 模型(1054,Unknown column in 'field list')

Django 中的自定义 HTTP 标头

在 Django 中查询 top x 元素