这是数据库模型的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或person_father' 错误将消失。 但当他们两个都在代码时会发生错误!
答案 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
模型的ForeignKey
到Author
,则django会将book_set
反向关系管理器属性添加到Author
(查询特定Books
的所有Author
)。
现在,在您的情况下,Django想要person_set
添加Person
,但是,因为您有两个ForeignKeys
到Person
,它不知道如何命名反向关系管理器属性。这就是为什么它暗示你使用related_name
。因此,使用person_father
属性将为您提供一个人的父亲的查询集,并为母亲提供person_mother
相同的查询集。