Django模型ForeignKey

时间:2015-02-18 15:38:04

标签: django django-1.7

这是数据库模型的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')

错误:

error

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

1 个答案:

答案 0 :(得分:0)

请阅读您在迁移时获得的提示(或尝试运行验证):您需要向related_name添加ForeignKey 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模型和Book模型的ForeignKeyAuthor,则django会将book_set反向关系管理器属性添加到Author(查询特定Books的所有Author)。

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