Переключение булевых полей из набора запросов с помощью 'not F()'

Я добавил новое действие для переключения свойства Users is_staff. Но я заметил, что используя метод ниже, можно переключать только от True к False. Другой способ, похоже, не работает (т.е. от False к True).

admin.py

from django.db.models.expressions import F

actions = ['toggle_staff']
def toggle_staff(self, request, queryset):
    queryset.update(is_staff= not F('is_staff'))

Пожалуйста, мне нужна помощь.

Вы всегда можете выполнять итерации над набором запросов, это может быть не лучшим решением, но если вы работаете с несколькими пользователями одновременно, вы не заметите разницы:

def toggle_staff(self, request, queryset):
    
    for user in queryset:
        if user.is_staff: user.is_staff = False
        else: user.is_staff = True
        user.save()
Вернуться на верх