我有两个模型,比如说Container和Item。容器有一个ManyToMany字段,用于将容器与项目相关联。我想将一个项目添加到容器中,然后列出该容器中的所有项目。但是,我注意到Django在添加每个项目之前都会对其进行查询,因此我最终遇到了三个查询,一个查询获取所有项目,一个查询要添加的项目是否存在,另一个查询要添加项目。有没有办法消除这种多余的检查?
我尝试使用set命令完全替换item_set,但它仍会添加重复项的额外检查。
# Select all items in item_set
existing = container.item_set.all()
# Select item in item_set (even though we know) and insert item into set
container.item_set.add(new_item)
简而言之:我想在集合中添加一个新项目,并在两个查询中添加集合中的所有旧项目
答案 0 :(得分:1)
在将新项目添加到多对多关系之前,无需检查该关系是否存在。将项目添加到现有关系中不会导致添加新行。您可以参考this answer了解详情。
换句话说,您可以安全地添加项目而无需先检查然后执行检索:
container.item_set.add(new_item)
items = container.item_set.all()