【问题标题】:Django: Update distinct queryset updates all recordsDjango:更新不同的查询集更新所有记录
【发布时间】: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


【解决方案1】:

我发现解决此问题的方法是执行以下操作。

queryset = Product.objects.values('manufacturerCode').distinct()
queryset = queryset.filter(FreeStock__gt = 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多