如果匹配abc。
,我想更改任何数据库变量的名称def icall(modeladmin, request, queryset):
for pri in queryset:
print('from test:', pri.name, pri.title) # priting if working fine
if pri.name == 'abc': # loop is matching the condition
pri.update(name='zzz') ## the value is not getting update in DB
else:
print("gg not mached")
pri.update(name='zzz')
os不在这里工作。
有人可以帮我了解正确的声明,根据if else条件更新数据库。
答案 0 :(得分:1)
更新查询在查询集上完成。它不是像你想要的那样在一个对象上完成的。你可以简单地做
queryset.filter(name='abc').update(name='zzz')
答案 1 :(得分:0)
def icall(modeladmin, request, queryset):
for pri in queryset:
print('from test:', pri.name, pri.title)
if pri.name == 'abc':
pri.name ='zzz'
pri.save()
print("working")
else:
print("gg not mached")
答案 2 :(得分:0)
您无法使用更新查询更新单个对象。可以使用update更新查询集中的对象。请参阅文档以获得澄清:Django Update query
在你的情况下。你可以这样做:
queryset.filter(name='abc').update(name='zzz')
而不是for-loop。
OR
for pri in queryset:
if pri.name == 'abc': # loop is matching the condition
pri.name='zzz'
pri.save() # save the updated value
如果您的模型附有信号,则会出现这种情况。 Update查询实际上并不使用django save,因此不会发出pre_save,post_save信号。