为了澄清,我已经收到了数以千计的物业项目,每项物品都有一个“礼物”。领域(以及其他)。要重置系统以便再次使用,我需要设置每个项目的属性'字段为false。现在,当然有简单的方法,只需:
for obj in Property.objects.all():
obj.present = False
obj.save()
但是我的开发服务器上需要将近30秒。我觉得必须有更好的方法,所以我尝试使用Django' only
查询集限制加载的字段:
for obj in Property.objects.only('present'):
obj.present = False
obj.save()
无论出于何种原因,这实际上需要更长而不仅仅是获取整个对象。
因为我需要不加选择地将所有这些值设置为False,是否有更快的方法?除了“去做”之外,此功能不会输入任何用户输入。命令,所以我觉得原生SQL命令是一个安全的选择,但我不知道SQL足以起草这样的命令。
谢谢大家。
答案 0 :(得分:4)
使用update
查询:
Property.objects.all().update(present=False)
请注意,update()
查询在SQL级别运行,因此如果您的模型具有自定义save()
方法,则不会在此处调用它。在这种情况下,您正在使用的正常for循环版本是可行的方法。