在Django中一次更新所有模型

Byt*_*eme 13 python sql django

我试图在Django(python)中一次更新特定顺序的所有对象的位置字段.

这就是我现在的做法,但问题在于它会产生大量查询.

    servers = frontend_models.Server.objects.all().order_by('-vote_count')

    i = 1
    for server in servers:
        server.last_rank = i
        server.save()
        i += 1
Run Code Online (Sandbox Code Playgroud)

有没有办法更新

Model.objects.all().order_by('some_field').update(position=some_number_that_changes_for each_object)
Run Code Online (Sandbox Code Playgroud)

谢谢!

Lak*_*sad 7

您可以使用F()表达式django.db.models来执行相同的操作:

Model.objects.all().order_by('some_field').update(position=F(some_field)+1)
Run Code Online (Sandbox Code Playgroud)

这将生成单个SQL查询以更新所有列值,因此它对数据库也是有效的.