我想用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()和排除()方法