我有一个简单的 django 查询集,例如:
qs = AModel.objects.exclude(state="F").order_by("order")
我想按如下方式使用它:
qs[0:3].update(state='F')
expected = qs[3] # throws error here
但是最后一条语句抛出: “一旦获取切片就无法更新查询。”
如何复制查询集?
最佳答案
这是抛出错误的第一行:你不能执行 qs[0:3].update()。 qs[0:3] 正在进行切片; update() 正在更新查询。
update() 用于批量更新,导致类似的 SQL 查询
UPDATE app_model SET state = 'F' WHERE state <> 'F';
您尝试根据“顺序”更新前三项,但这无法通过这种类型的 UPDATE 来完成 - 您无法排序或限制 SQL UPDATE。它需要以不同的方式编写,例如。
UPDATE app_model SET state = 'F' WHERE id IN (
SELECT id FROM app_model WHERE state <> 'F' ORDER BY order LIMIT 3
) AS sub;
但是 Django 无法为你做到这一点。
关于python - 重复的 Django 查询集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1170235/