如何在 Django 查询集上调用更新,它不写入特定值,但修改已经存在的值,如下所示
Entry.objects.filter(pub_date__year=2010).update(count+=1)
我怎样才能做到这一点?
您可以使用文档中的 F 表达式:
reporter = Reporters.objects.filter(name='Tintin'(
reporter.update(stories_filed=F('stories_filed'( + 1(
试试这个:
from django.db.models import F
Entry.objects.filter(pub_date__year=2010).update(count=F('count') + 1)
for e in Entry.objects.filter(pub_date__year=2010):
e.count+= 1
e.save()
注意:
如果您使用的是 F 表达式 - 则正在使用.update()
方法。
如果您在重写的 .save()
方法中有所需的逻辑 - 则不会在此类更新中调用它。
要使用.save()
方法,您需要使用常规方法:
foo.bar += 1
foo.save()
文档:
最后,意识到 update(( 在 SQL 级别进行更新,并且,因此,不会在模型上调用任何 save(( 方法,也不会发出pre_save或post_save信号(这是调用 Model.save((