多对多领域——django模型——理解

Posted

技术标签:

【中文标题】多对多领域——django模型——理解【英文标题】:many to many field - django model - understanding 【发布时间】:2013-03-29 14:16:15 【问题描述】:

我正在尝试实现一个人可以将另一个人添加为朋友的小项目。

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

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

就这些了吗?我不知何故陷入了不知道如何设计的逻辑。我阅读了文档,但我没有以某种方式进入这一点,有人可以帮助我。

非常感谢

【问题讨论】:

看看***.com/questions/4219979/… 【参考方案1】:

除非您需要存储有关关系的额外信息,否则实际上不需要创建另一个模型。例如,它已经定义了基本关系:

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()

【讨论】:

这与使用外键而不是多对多关系有何不同?是因为友谊模型包含 Foriengkeys 吗?

以上是关于多对多领域——django模型——理解的主要内容,如果未能解决你的问题,请参考以下文章

Django自引用多对多模型

Django 模型 - 至少多对多之一

Django:按多对多字段订购模型

Django模型(继承、一对多、多对多)

Django ORM - 通过模型查询多对多?

多对多查询的 Django 模型文件更新