我想用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()
还有更优雅的方式吗?
我想用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()
还有更优雅的方式吗?
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
方法(所以如果你里面有一些逻辑,它就不会被触发). .update()
,它必须在原始查询集上执行,因此需要使用.filter()
和.exclude()
方法.