【问题标题】:Django's ManyToManyField automatically adding a symmetric relationship between objectsDjango 的 ManyToManyField 自动添加对象之间的对称关系
【发布时间】:2015-04-14 21:20:55
【问题描述】:

我正在尝试编写一个模型,该模型包含对其他对象的引用列表 同一个班级。我正在使用 ManyToManyField 来存储这些引用。对于一些 当我将元素添加到第二个元素的多对多字段时,我得到的原因 添加到第一个的互惠关系。

这是我声明的测试模型

class TestModel(models.Model):
    foo = models.ManyToManyField('self', null=True)

然后我使用交互式 shell 填充数据库

In [1]: from m2m.models import TestModel

In [2]: m1 = TestModel()
In [3]: m1.save()

In [4]: m2 = TestModel()
In [5]: m2.save()

我检查了 m1 和 m2 的 foo 字段是否为空。

In [6]: m1.foo.all()
Out[6]: []
In [7]: m2.foo.all()
Out[7]: []

然后我将 m2 添加到 m1.foo

In [8]: m1.foo.add(m2)
In [9]: m1.foo.all()
Out[9]: [<TestModel: TestModel object>]

这就是我迷路的地方,由于某种我不明白的原因,当我将 m2 附加到 m1.foo 时,m1 被附加到 m2.foo。

In [10]: m2.foo.all()
Out[10]: [<TestModel: TestModel object>]

In [11]: m1.id
Out[11]: 1

In [12]: m1.foo.get().id
Out[12]: 2

In [13]: m2.foo.get().id
Out[13]: 1

我不是 Django 的 ORM 专家,所以我不完全理解为什么会这样 正在自动建立关系。

有没有办法避免这种行为?

【问题讨论】:

    标签: python django django-models many-to-many


    【解决方案1】:
    猜你喜欢
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2021-08-26
    • 2016-02-08
    • 2011-03-08
    相关资源
    最近更新 更多