Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 高效地从ManyToManyField检索和添加到ManyToManyField_Django - Fatal编程技术网

Django 高效地从ManyToManyField检索和添加到ManyToManyField

Django 高效地从ManyToManyField检索和添加到ManyToManyField,django,Django,我有两个模型,比如说容器和物品。Container有一个多个字段,用于将容器与项目关联。我想向容器中添加一个项目,然后列出此容器中的所有项目。但是,我注意到Django在添加每个项目之前都会对其进行查询,因此我最终会进行三次查询,一次是获取所有项目,一次是检查我要添加的项目是否存在,另一次是添加项目。有没有办法消除这种多余的检查 我尝试使用set命令完全替换item_set,但它仍然添加了额外的重复检查 选择项目集合中的所有项目 现有=container.item\u set.all 在项目集合

我有两个模型,比如说容器和物品。Container有一个多个字段,用于将容器与项目关联。我想向容器中添加一个项目,然后列出此容器中的所有项目。但是,我注意到Django在添加每个项目之前都会对其进行查询,因此我最终会进行三次查询,一次是获取所有项目,一次是检查我要添加的项目是否存在,另一次是添加项目。有没有办法消除这种多余的检查

我尝试使用set命令完全替换item_set,但它仍然添加了额外的重复检查

选择项目集合中的所有项目 现有=container.item\u set.all 在项目集合中选择项目,即使我们知道并在集合中插入项目 container.item\u set.addnew\u项目
简言之:我想在两次查询中添加一个新项目到集合中,并从集合中删除所有旧项目。在将新项目添加到多对多关系之前,无需检查该关系是否存在。将项目添加到现有关系不会导致添加新行。有关详细信息,请参阅

换句话说,您可以安全地添加项目,而无需先进行检查,然后执行检索:

container.item_set.add(new_item)
items = container.item_set.all()

不,我不是手动检查。但是,当您执行item_set.addnew_item,然后选中django.db.connection.querys时,它会执行SELECT和INSERT查询。