我有一个模型MyModel
,它有一个布尔字段active
在其他地方,我正在检索一个查询集:
qs = MyModel.Objects.filter(....)
我该如何在这个qs
中将所有对象的active
设为False
?
我有一个模型MyModel
,它有一个布尔字段active
在其他地方,我正在检索一个查询集:
qs = MyModel.Objects.filter(....)
我该如何在这个qs
中将所有对象的active
设为False
?
当然,你可以传递许多参数来更新,例如:
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"])