2011-04-21 62 views
2

我在我的网站上创建了推荐系统。无可否认,这很晚了,这可能不是正确的关系。管理员内嵌模型有2个外键到同一模型?

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 

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

感谢

回答

0

其实,这是用户和自身之间的多对多的关系 - 在推荐类本身并没有关系添加任何东西。

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

编辑回复评论不,这不完全是我的意思。我说你应该完全放弃推荐类。一个只有两个FK的模型 - 无论它们是否都是同一个模型 - 都是M2M关系的直通表。在你的情况下,这种关系是在用户和自身之间 - 但正如我所说,由于你不想改变用户,它是在一个新的UserProfile模型和它自己之间。

+0

正确使用内置的用户模型,我不想改变。 Referral类本质上是一个UserProfile类,在这里,正确的...除了它没有额外的查询集的功能,从它的命名派生UserProfile(我应该做的改变) – Ben 2011-04-21 13:32:56

+0

此外,我有点困惑你的描述它作为一个M2M领域。被推荐的用户只能有1个推荐人。我会认为这是一个多对一的关系,因此是外键。我错过了什么? – Ben 2011-04-21 13:34:11

+0

对称定义额外字段的ManyToManyFields的中间模型如何? – 2011-06-05 23:39:51