2016-10-16 79 views
0

在Django的模型我想提出一個表「追隨者」,其中有:Django模型:數據庫設計爲用戶和跟隨

user's id. (this is followed by) 
user's id (this is follower) 

這是簡單的用戶可以關注其他用戶。

我應該如何在Django中定義模型?

我想這一點,但不工作:

user = models.ForeignKey('self') 
follower_id = models.ForeignKey('self') 

應該如何進行?

感謝

回答

1

「自我」的說法是行不通的,除非你有一個叫self模型。

假設你的分配模式被稱爲Following,而你使用內置的User模型,那麼你可以這樣做:

class Following(models.Model): 
    target = models.ForeignKey('User', related_name='followers') 
    follower = models.ForeignKey('User', related_name='targets') 

這可能需要一些進一步的獨特性和驗證邏輯。

注意related_name屬性,請參見https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ForeignKey.related_name。這意味着對於給定的用戶對象,您可以使用user.targets.all()來獲取他們關注的用戶,並且user.followers.all()可以獲取關注他們的用戶。

還要注意,Django在ORM中返回目標模型實例,而不是ID。這意味着即使底層表可能被稱爲follower_id,在Python代碼following.follower中將返回一個實際的用戶對象。

+0

我做了這個..但是我得到這個錯誤: main.followers.follower_id :(fields.E304)'followers.follower_id'的反向訪問器與'followers.user'的反向訪問器發生衝突。 \t提示:爲'followers.follower_id'或'followers.user'的定義添加或更改related_name參數。 – Sach

+0

和'自我'是用於遞歸關係...對嗎? – Sach

+0

啊,是的。 Django創建反向關係,這樣您就可以向後關注關係。我已經修改了我的答案以添加'related_name'屬性。 – nimasmi