我尝试描述模型,但Django报告了一些错误。我可以修复一些错误,但不能修复所有错误。然后我不会改变它来更清楚地描述我的目的:
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=128)
father_is = models.ForeignKey('self')
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
led_by = models.ForeignKey(Person)
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
invited_by = models.ForeignKey(Person) # who invited this person to this group
你能给我一个解决方案,请问? (这是2个字段的错误:led_by和invite_by) 非常感谢你!
PS:我刚开始学习Django。编辑: 现在我知道它是关于Django的ORM的限制。 OFFTOPIC!的
答案 0 :(得分:4)
问题是在单个模型上有多个外键到同一类型?在这种情况下,django无法为您设置自动向后关系,因此您需要明确指定related_name
。有关说明,请参阅the docs
修改强> 从你的错误,似乎这正是问题。它甚至告诉你该怎么做:
将related_name参数添加到“members”
的定义中
<强> EDIT2:强> 好的,现在我们到了某个地方。但是,答案是“阅读文档”。来自docs on using through relations(强调补充):
中间模型有一些限制:
您的中间模型必须包含一个 - 且只有一个 - 目标模型的外键(在我们的示例中,这将是Person)。如果您有多个外键,则会引发验证错误。
您的中间模型必须包含一个 - 且只有一个 - 源模型的外键(在我们的示例中,这将是Group)。如果您有多个外键,则会引发验证错误。