2013-04-07 74 views
1

我正在嘗試實現一個小項目,其中一個人可以添加另一個人作爲朋友。多對多 - django模型 - 瞭解

我想在這個數據庫中關係模型:我想,我會做另一種模式叫做friendship,我會寫它的模式是這樣的:

class friendship(models.Model): 
    friend = models.ManyToManyField(User) 

這一切?我以某種方式卡在不知道如何設計這一邏輯..我閱讀文檔,但我不明白這一點,有人可以幫助我。

非常感謝

+0

看一看http://stackoverflow.com/questions/4219979/sql-best-practise-for-a-friendship-table – MostafaR 2013-04-07 14:08:36

回答

5

除非需要存儲關於關係的額外信息,否則不需要創建另一個模型。例如,它已經定義的基本關係:

class User(models.Model): 
    ... 
    friends = models.ManyToManyField(self) # self means User. 

如果你想存儲額外的信息,比如哪些類型的朋友,如何接近他們。 然後你需要一個額外的模型。

class User(models.Model): 
    ... 
    friends = models.ManyToManyField(self, through='Friendship') 


class Friendship(models.Model): 
    from_user = models.ForeignKey(User, related_name="from_user") 
    to_user = models.ForeignKey(User, related_name="to_user") 
    friend_type = models.CharField(max_length=255) 
    friend_rated = models.FloatField() 
+0

哇,很不錯的解釋。非常感謝 – doniyor 2013-04-07 14:16:58

+0

這與使用ForeignKey而不是ManyToMany關係有什麼不同?是因爲Freindship模型包含Foriengkeys? – 2015-05-11 04:31:59