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
模型和一个具有 ForeignKey
到 Author
的 Book
模型,django 将添加一个 book_set
反向关系管理器属性到Author
(查询特定 Author
的所有 Books
)。
现在,在你的例子中,Django 想要添加一个 person_set
到 Person
,但是,因为你有两个 ForeignKeys
到 Person
它不知道如何命名反向关系管理器属性。这就是它提示您使用 related_name
的原因。因此,使用 person_father
属性将为您提供一个人的父亲的查询集,person_mother
为母亲提供相同的查询集。
这是数据库模型的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
模型和一个具有 ForeignKey
到 Author
的 Book
模型,django 将添加一个 book_set
反向关系管理器属性到Author
(查询特定 Author
的所有 Books
)。
现在,在你的例子中,Django 想要添加一个 person_set
到 Person
,但是,因为你有两个 ForeignKeys
到 Person
它不知道如何命名反向关系管理器属性。这就是它提示您使用 related_name
的原因。因此,使用 person_father
属性将为您提供一个人的父亲的查询集,person_mother
为母亲提供相同的查询集。