小编典典

如何使用 Django 进行“批量更新”?

all

我想用 Django 更新一个表——在原始 SQL 中是这样的:

update tbl_name set name = 'foo' where name = 'bar'

我的第一个结果是这样的——但这很讨厌,不是吗?

list = ModelClass.objects.filter(name = 'bar')
for obj in list:
    obj.name = 'foo'
    obj.save()

有没有更优雅的方式?


阅读 67

收藏
2022-06-23

共1个答案

小编典典

更新:

Django 2.2
版本现在有一个bulk_update

老答案:

请参阅以下 django 文档部分

一次更新多个对象

简而言之,您应该能够使用:

ModelClass.objects.filter(name='bar').update(name="foo")

您还可以使用F对象来执行诸如递增行之类的操作:

from django.db.models import F
Entry.objects.all().update(n_pingbacks=F('n_pingbacks') + 1)

请参阅文档

但是,请注意:

  • 这不会使用ModelClass.save方法(所以如果你里面有一些逻辑,它就不会被触发)。
  • 不会发出 django 信号。
  • 您不能.update()在切片的 QuerySet 上执行 an,它必须在原始 QuerySet 上,因此您需要依靠.filter()and.exclude()方法。
2022-06-23