2011-04-21 34 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

相關問題