【发布时间】:2016-04-22 08:11:48
【问题描述】:
我有一个模型 MyModel 带有一个布尔字段 active
在其他地方,我正在检索一个查询集:
qs = MyModel.Objects.filter(....)
如何为这个qs中的所有对象设置active=False?
【问题讨论】:
标签: python django django-queryset
我有一个模型 MyModel 带有一个布尔字段 active
在其他地方,我正在检索一个查询集:
qs = MyModel.Objects.filter(....)
如何为这个qs中的所有对象设置active=False?
【问题讨论】:
标签: python django django-queryset
【讨论】:
当然你可以传递许多参数来更新,例如:
qs.update(active=False, is_deleted=True, date_finished=timezone.now())
编辑: 此外。这个简单的 qs.update(...) 不适用于切片查询集。例如,如果您有:
users = User.objects.filter(is_active=True)[:10]
user.update(is_active=False) # This will throw error
在这种情况下,从 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"])
这通常在一个查询中完成,而不是在 10 个单独的查询中完成。我在我的一个项目中遇到过这种要求。希望对您有所帮助。
【讨论】: