Django型号外键
这是数据库模型的django1.7代码 我对这个代码有问题。 这是models.py文件Django型号外键,django,django-1.7,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.For
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')
错误:
如果我删除其中一个->“个人母亲或个人父亲”
错误将会消失。
但当它们都处于代码错误状态时,就会发生错误 请阅读运行migrate(或尝试运行validate)时得到的提示:您需要将
相关的\u名称
kwarg添加到您的外键
,如下所示:
person\u father=models.ForeignKey('person',related\u name='child\u from\u father')
person\u mother=models.ForeignKey('person',related\u name='child\u from\u mother')
您需要使用related_name
,因为当Django遇到ForeignKey
时,它将尝试在外键模型中添加反向关系字段。例如,如果您有一个作者
模型和一个书籍
模型,该模型在作者
中有一个外键
,django将在作者
中添加一个书籍集
反向关系管理器属性(以查询特定作者
的所有书籍
)
现在,在您的例子中,Django想在
person
中添加一个person\u集,但是,因为您有两个foreignkey
到person
它不知道如何命名反向关系管理器属性。这就是它提示您使用相关名称的原因。因此,使用person\u-father
属性可以获得一个人父亲的查询集,而person\u-mother
对母亲的查询集也是如此。您的相关名称非常混乱。这些相关的名称表示“children”,因此可能“children\u from\u father”和“children\u from\u mother”也表示字段的确切名称。这不应该通过模型checks@Alvaro也许你是对的。。。我已经更改了它们,同意了-大多数时候我喜欢对字段名和相关的_名称使用相同的名称。但是,在这种情况下,这将不起作用(因为ForeignKey是同一型号的)很好!另一个问题:你从哪里知道django的确切情况?我是说像这样的问题!?