【发布时间】:2023-03-13 02:34:01
【问题描述】:
由于我不明白的原因,当我创建一个不同的查询集并对其进行更新时,Django 会更新查询集中的所有项目,就好像它一开始并不不同一样
例如:
items = Item.object.filter(SOME-FILTERS).order_by('gender').distinct('gender')
items.update(quantity=F('quantity') - 1)
结果是两行更新
如果我迭代项目,它只会更新 1:
for item in items:
item.quantity -= 1
item.save()
【问题讨论】:
-
我完全不确定
distinct在这里做了什么有意义的事情,无论是更新还是选择。但是,很可能它不适用于更新语句(UPDATE语句中的语法无论如何都会起作用),因此您的更新运行时没有区别。免责声明:IANADP。 -
你能显示你的数据吗?
-
我在检查项目时只得到 1 个对象,但更新语句更新了 2 个
-
我检查过,Django 实际上生成了这个: UPDATE "item" SET "quantity" = ("item"."quantity" - 1) WHERE "item"."gender" = "F" For some它丢弃 DISTINCT 的原因
-
您希望发生什么?应该更新哪一行?
distinct在更新中根本没有意义,而 PostgreSQL(您似乎正在使用)doesn't support it。
标签: python django distinct django-queryset