Как я могу определить и сослаться на пользовательские группы пользователей в Django, по которым я могу сортировать, например, user.is_superuser?

Я создал несколько пользовательских групп в моем приложении Django, потому что я хочу показывать им разные наборы полей администратора. Я думал, что они будут работать аналогично user.is_superuser.

Но они не делают этого.

У меня есть этот def в моем ModelAdmin:

def is_approver(user):
        return user.groups.filter(name='approver').exists()

(Кстати, я не знаю, как это называется. Вы называете это просто "def"?)

Так это работает:

    def get_fieldsets(self, request, obj=None):
        if request.user.is_superuser:
            return self.superuser_fieldset

Я получаю ожидаемый набор полей.

Но это не работает:

    def get_fieldsets(self, request, obj=None):
        if request.user.is_approver:
            return self.approver_fieldset

Однако это работает:

def get_fieldsets(self, request, obj=None):
    if request.user.groups.filter(name='approvers').exists():
         return self.approvers_fieldset

Итак, я полагаю, мой основной вопрос: почему мои def работают не так, как я ожидаю?

(Python 3.9.7, Django 3.1)

добавьте этот код в модель пользователя

@property
def is_approver(self):
    return self.groups.filter(name='approver').exists()
Вернуться на верх