2017-08-30 39 views
0

我需要使用存儲User類實例的外鍵創建表「Friend」,其中兩個用於朋友,另一個用於用戶屬性。 (表是關係)如何在一個類中設置兩個外鍵? DJANGO ORM

如何做到這一點? OnetoOneField不起作用。如果我嘗試製作兩個鍵,它會在終端中給我一個錯誤。 所以這是兩個從用戶到好友的多對多關係。

如果不可能,有什麼更好的方法來設置它? 用戶表可以與自己有一對多的關係嗎?

class Friend(models.Model): 
    id = models.IntegerField(primary_key=True) 
    friend_id= models.ForeignKey(User, null=False) 
    user_id = models.ForeignKey(User, null=False) 
+0

實際上,多對多的關係會在後臺創建一個帶有兩個外鍵的新映射表。所以,如果你不想取代用戶類,你看起來不錯。 –

回答

0

讓我們來看看,如果我理解你的懷疑,你不需要2間的關係, 只是一個用戶,並從中你可以訪問關係的所有屬性。 例子:

Friend.user_id.firstname 
0

,你可能看到這個錯誤,而試圖使遷移:

appname.Friend.friend_id: (fields.E305) Reverse query name for 'Friend.friend_id' clashes with reverse query name for 'Friend.user_id'. 
     HINT: Add or change a related_name argument to the definition for 'Friend.friend_id' or 'Friend.user_id' 

它清楚地告訴,你應該添加related_name說法:

class Friend(models.Model): 
    friend_id = models.ManyToManyField(settings.AUTH_USER_MODEL) 
    user_id = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='user_id') 

這裏是Django docs page關於定製和擴展exicting User模型的最佳實踐。

相關問題