[Django]-Django: change the value of a field for all objects in a queryset

144👍

You can update all the records in the queryset with

qs.update(active=False)

Please refer to the official Django documentation for more info

8👍

And of course you can pass many arguments to update e.g.:

qs.update(active=False, is_deleted=True, date_finished=timezone.now())

Edit:
Additionally. This simple qs.update(…) won’t work on sliced querysets. For example if you have:

users = User.objects.filter(is_active=True)[:10]
user.update(is_active=False)  # This will throw error

in that kind of situation, since Django 2.2, you can use bulk_update() method like:

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"])

This will be generally done in one query not in 10 separate queries. I’ve faced that kind of requirements in one of my project. Hope it will be helpful.

Leave a comment