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)
谢谢!
您可以使用F()表达式django.db.models来执行相同的操作:
Model.objects.all().order_by('some_field').update(position=F(some_field)+1)
Run Code Online (Sandbox Code Playgroud)
这将生成单个SQL查询以更新所有列值,因此它对数据库也是有效的.