多对多的领域 - django模型 - 理解

时间:2013-04-07 13:55:47

标签: python database django database-design many-to-many

我正在尝试实施一个小项目,其中一个人可以添加另一个人作为朋友。

我想在数据库中建模这种关系:我想,我会做另一个名为friendship的模型,我会写这样的模型:

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

这就是全部吗?我不知何故陷入逻辑而不知道如何设计这个...我读了文档,但我不知道如何,有人可以帮助我。

非常感谢

1 个答案:

答案 0 :(得分: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()