Django 模型外键

Django models ForeignKey

这是数据库模型的django1.7代码 我对这段代码有疑问。 这是 models.py 个文件。

class Person(models.Model):
    person_id=models.AutoField(primary_key=True)
    person_name=models.CharField(max_length=100)
    person_family=models.CharField(max_length=100)
    person_father=models.ForeignKey('Person')
    person_mother=models.ForeignKey('Person')

错误:

如果我删除其中一个 -> 'person_mother or person_father ' 错误将消失。 但是当它们都在代码中时会发生错误!

请阅读 运行 迁移时得到的提示(或尝试 运行 验证):您需要向 ForeignKey 添加一个 related_name kwarg,像这样:

person_father=models.ForeignKey('Person', related_name='child_from_father') person_mother=models.ForeignKey('Person', related_name='child_from_mother')

你需要使用related_name,因为当Django遇到ForeignKey时,它会尝试在外键模型中添加一个反向关系字段。例如,如果您有一个 Author 模型和一个具有 ForeignKeyAuthorBook 模型,django 将添加一个 book_set 反向关系管理器属性到Author(查询特定 Author 的所有 Books)。

现在,在你的例子中,Django 想要添加一个 person_setPerson,但是,因为你有两个 ForeignKeysPerson 它不知道如何命名反向关系管理器属性。这就是它提示您使用 related_name 的原因。因此,使用 person_father 属性将为您提供一个人的父亲的查询集,person_mother 为母亲提供相同的查询集。