Django ManyToMany 字段的 set() 操作是不是清除现有关系?
Posted
技术标签:
【中文标题】Django ManyToMany 字段的 set() 操作是不是清除现有关系?【英文标题】:Does Django ManyToMany field's set() operation clear existing relations?Django ManyToMany 字段的 set() 操作是否清除现有关系? 【发布时间】:2020-12-04 07:25:40 【问题描述】:下面2种情况下Django ORM操作有什么区别吗?会有任何性能提升等吗?
obj.manytomanyfield.clear()
obj.manytomanyfield.add(1,2,3,4,5)
和
obj.manytomanyfield.set([1,2,3,4,5])
【问题讨论】:
【参考方案1】:来自文档,set()
-Django doc
此方法接受
clear
参数来控制如何执行 手术。如果False
(默认),则新元素中缺少 set 使用remove()
删除,只添加新的。如果clear=True
,改为调用clear()
方法,整个集合为 立即添加。
这意味着,
obj.manytomanyfield.clear()
obj.manytomanyfield.add(1,2,3,4,5)
等于
obj.manytomanyfield.set([1,2,3,4,5], <b>clear=True</b>)
【讨论】:
因此,最终 obj 将只有 (1,2,3,4,5) 关系。对吗? @Jarvis 我很确定:是的。关于性能,我也很感兴趣,因为我不确定clear
参数的真正目的是什么(可能是竞争条件,因为文档中提到了这一点)。以上是关于Django ManyToMany 字段的 set() 操作是不是清除现有关系?的主要内容,如果未能解决你的问题,请参考以下文章