Django与模型之间的双向关系

标签 django model foreign-keys

我需要在一组对象(我们称其为“Person”)之间存储一些关系类型数据。所以,有些模型是这样的:

class Person(models.Model):
    name = models.CharField(max_length=64)

class Relationship(models.Model)
    person1 = models.ForeignKey(Person, related_name='person1')
    person2 = models.ForeignKey(Person, related_name='person2')
    relationship_type = models.ChoiceField(choices=...)
    information = models.TextField()

...因此,每个人都可以链接到任何其他人。但是,有些关系不是定向,因此谁是 person1 或谁是 person2 并不重要(在此示例中,我们假设 PersonA 是 PersonB 的“ friend ”)。其他类型的关系是定向,其中顺序很重要(例如,PersonC 是 PersonD 的“老板”)。

在 Django 中处理这个问题的最佳方法是什么?

最佳答案

可能的解决方案是为用户之间的关系建立两个模型。 一种用于定向,一种用于双向 考虑一下你的程序的逻辑。几乎每次从数据库中获取用户时,您都需要知道它是什么类型的关系。有了两个关系模型,你就不会有这样的问题。这种方式的唯一缺点是您必须进行两个查询才能显示人与人之间的所有关系 - 但在大多数情况下,这并不是一项常见的任务。

关于Django与模型之间的双向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15988084/

相关文章:

django - 我应该在 django 模型管理器中进行外部 API 调用吗

mysql - 复合主键之一作为外键 Mysql

python - Django:外键链接 2 个表

python - 如何进行查询以过滤其中一列等于同一表中另一列的行?

python - 无法使用 virtualenv 运行 Apache2

c - 基数右边的分数 - float 转换

ruby-on-rails - 如何在 Rails 中建模 "can belong to A or B"关系?

mysql - 所选列没有兼容的类型,即使它具有相同的类型

postgresql - 为什么 drop table cascade 不删除 postgresql 中的子表?

sql - 在 WHERE 子句中使用可选条件的正确方法