python - 重复的 Django 查询集?

标签 python django django-models

我有一个简单的 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/

相关文章:

python - ValueError : When changing to a larger dtype, 其大小必须是数组最后一个轴的总大小(以字节为单位)的除数

django - 使用模板变量创建名为 URL 的 Django?

python - 异常测试失败

python - 如何反转 SQL 查询以到达其 Django 源?

python - Django 多对多(通过),带有三个表和额外属性

python - "only length-1 arrays can be converted to Python scalars"在 Sage 中使用 scipy.optimize

python - 在抛出 subprocess.TimeoutExpired 后杀死 Python 子进程的子进程

python - 安装菲奥娜: Must the gdal version be compatible with fiona?

基于 Django 类的 View 。对不同的 url 使用相同的自定义类

django - 尽量避免循环导入