Django: Переопределить пользовательский набор запросов, чтобы отфильтровать администраторов / сотрудников от общественности? - PullRequest
0 голосов
/ 04 октября 2019

Я хочу отфильтровать метод self.get_queryset () менеджера пользователей таким образом, чтобы пользователи клиентского приложения не видели администраторов и сотрудников при поиске или просмотре других учетных записей. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу войти в систему с моей системой аутентификации, если я полностью переопределяю get_queryset. Моя текущая настройка:

class AccountManager(BaseUserManager):
    def get_public_queryset(self):
        return self.get_queryset().filter(active=True, verified=True, admin=False, staff=False)



Использование этого дизайна прекрасно работает, если я определяю различные методы сортировки в менеджере (потому что я могу просто вызвать этот метод), но кажется, что должен быть лучший способсделай это. Есть идеи?

1 Ответ

0 голосов
/ 04 октября 2019

Я думаю, что дополнительные методы, поскольку вы реализовали их, являются хорошим решением, но если вы настаиваете на использовании метода get_queryset, было бы хорошо переопределить метод и сохранить базовую функциональность. Я бы сделал что-то вроде этого:

...
def get_queryset(self, *a, **kw):
    queryset = super().get_queryset(*a, **kw)
    # filter your queryset here as you wish
    queryset = queryset.filter(active=True, verified=True, admin=False, staff=False)
    return queryset
...

Как я заметил из текста вопроса, вы попытались вызвать self.get_queryset (), который будет рекурсивным (не вызовом реализации суперкласса), который будетнаконец, ошибка максимальной глубины рекурсии превышена.

Надеюсь, это поможет

...