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

我想用Django更新一个表-在原始SQL中类似这样:

更新tbl\u名称集名称='foo'其中名称='bar'

我的第一个结果是这样的——但这很糟糕,不是吗

list=ModelClass.objects.filter(名称='bar')
对于列表中的obj:
obj.name='foo'
obj.save()

还有更优雅的方式吗

更新:

Django 2.2版本现在有一个批量更新

旧答案:

请参阅以下django文档部分

一次更新多个对象

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

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

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

来自django.db.models import F的


Entry.objects.all().update(n_pingbacks=F('n_pingbacks')+1)

请参阅文档

但是,请注意:

  • 这不会使用ModelClass.save方法(因此,如果您有一些逻辑,它将不会被触发)
  • 不会发出django信号
  • 不能在切片查询集上执行.update(),它必须在原始查询集上执行,因此需要使用.filter()排除()方法

发表评论