多对多关系 — Django 文档
多对多关系
要定义多对多关系,请使用 ManyToManyField。
在这个例子中,一个Article
可以发布在多个Publication
对象中,一个Publication
有多个Article
对象:
下面是可以使用 Python API 工具执行的操作示例。
创建几个Publications
:
创建一个 Article
:
在保存之前,您无法将其与 Publication
关联:
保存!
将 Article
与 Publication
关联:
创建另一个Article
,并将其设置为出现在Publications
中:
添加第二次就可以了,它不会复制关系:
添加错误类型的对象会引发 TypeError
:
使用 create() 一步创建 Publication
并将其添加到 Article
:
Article
对象可以访问其相关的 Publication
对象:
Publication
对象可以访问其相关的 Article
对象:
可以使用 跨关系 查找来查询多对多关系:
count() 函数也尊重 distinct():
支持反向 m2m 查询(即,从没有 ManyToManyField 的表开始):
排除相关项也可以正常工作(尽管所涉及的 SQL 有点复杂):
如果我们删除一个 Publication
,它的 Articles
将无法访问它:
如果我们删除一个 Article
,它的 Publications
将无法访问它:
通过 m2m 的“另一端”添加:
使用关键字通过另一端添加:
从 Article
中移除 Publication
:
从另一端:
可以设置关系集:
可以清除关系集:
你可以从另一端清除:
重新创建我们已经删除的 Article
和 Publication
:
批量删除一些 Publications
- 对已删除出版物的引用应该:
批量删除一些文章 - 对已删除对象的引用应该:
delete()后,需要清除QuerySet缓存,引用的对象应该没了: