2013-04-07 73 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