管理员内联模型有2个外键到同一模型?

时间:2011-04-21 06:54:59

标签: django django-admin foreign-keys

我在我的网站上创建了一个推荐系统。不可否认,现在已经很晚了,这可能不是正确的关系。

class Referral(models.Model):
    referred=models.ForeignKey(User, related_name="referred")
    referrer=models.ForeignKey(User,related_name="referrer")

    def __unicode__(self):
        return self.user.first_name

其他人会建议代表这种关系吗?如果这是正确的,有没有办法让我把它变成用户管理员的伪内联?它不允许像当前构造的那样因为有两个外键来表示同一个表。

由于

1 个答案:

答案 0 :(得分:0)

实际上,这是User与其自身之间的ManyToMany关系 - Referral类本身不会为关系添加任何内容。

通常,您可以将ManyToManyField添加到模型中,它将显示在管理员中 - 但我猜您引用的User类是内置的django.contrib.auth用户,您可以' t直接修改。因此,一种方法是定义一个具有ForeignKey to User的UserProfile类,并在那里添加ManyToMany关系。

编辑以回应评论不,这不是我的意思。我说你应该完全放弃推荐课程。只有两个FK而不是其他任何东西的模型 - 无论它们是否属于同一模型 - 都是M2M关系的直通表。在你的情况下,这种关系是在用户和它自己之间 - 但正如我所说的,因为你不想改变用户,它是在一个新的UserProfile模型和它自己之间。