Django的ManyToManyField自动添加对象之间的对称关系
Django's ManyToManyField automatically adding a symmetric relationship between objects
我正在尝试编写一个模型,其中包含对其他对象的引用列表
同样class。我正在使用 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 专家,所以我不完全理解为什么会这样
正在自动建立关系。
有什么办法可以避免这种行为吗?
使用 ManyToManyField 的对称参数。
我正在尝试编写一个模型,其中包含对其他对象的引用列表 同样class。我正在使用 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 专家,所以我不完全理解为什么会这样 正在自动建立关系。
有什么办法可以避免这种行为吗?
使用 ManyToManyField 的对称参数。