Django模型与多个ForeignKey到一个表

时间:2011-11-21 09:38:14

标签: django-models

  

可能重复:
  Django: Why some fields clashes with other

我尝试描述模型,但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!

1 个答案:

答案 0 :(得分:4)

问题是在单个模型上有多个外键到同一类型?在这种情况下,django无法为您设置自动向后关系,因此您需要明确指定related_name。有关说明,请参阅the docs

修改 从你的错误,似乎这正是问题。它甚至告诉你该怎么做:

  

将related_name参数添加到“members”

的定义中

<强> EDIT2: 好的,现在我们到了某个地方。但是,答案是“阅读文档”。来自docs on using through relations(强调补充):

  

中间模型有一些限制:

     
      
  • 您的中间模型必须包含一个 - 且只有一个 - 目标模型的外键(在我们的示例中,这将是Person)。如果您有多个外键,则会引发验证错误。

  •   
  • 您的中间模型必须包含一个 - 且只有一个 - 源模型的外键(在我们的示例中,这将是Group)。如果您有多个外键,则会引发验证错误。

  •