Django queryset update() 以 += 的方式



如何在 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((

最新更新