43T*_*cts 36 python django django-queryset
我有一个MyModel
带有布尔字段的模型active
在其他地方,我正在检索一个查询集:
qs = MyModel.Objects.filter(....)
Run Code Online (Sandbox Code Playgroud)
如何active=False
为此中的所有对象设置qs
?
Pyn*_*hia 63
您可以使用更新查询集中的所有记录
qs.update(active=False)
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅官方Django文档
当然,您可以传递许多参数来更新,例如:
qs.update(active=False, is_deleted=True, date_finished=timezone.now())
Run Code Online (Sandbox Code Playgroud)
编辑:另外。这个简单的 qs.update(...) 不适用于切片查询集。例如,如果您有:
users = User.objects.filter(is_active=True)[:10]
user.update(is_active=False) # This will throw error
Run Code Online (Sandbox Code Playgroud)
在这种情况下,从 Django 2.2 开始,您可以使用bulk_update()方法,例如:
users_to_update = list(User.objects.filter(is_active=True)[:10])
for i in range(10):
users_to_update.is_active = False
User.objects.bulk_update(users_to_update, ["is_active"])
Run Code Online (Sandbox Code Playgroud)
这通常会在一个查询中完成,而不是在 10 个单独的查询中完成。我在我的一个项目中遇到过这种要求。希望它会有所帮助。
归档时间: |
|
查看次数: |
23175 次 |
最近记录: |