Перенаправление пользователя на индекс после снятия ограничения

У меня есть две группы пользователей Администраторы и Клиенты, и я пытаюсь перенаправить пользователей из группы Клиенты на индексную страницу, если они попытаются получить доступ к детальному просмотру вычислений, которые им не принадлежат. Я все еще хочу позволить администраторам просматривать детали расчетов всех пользователей. Я использую встроенную в Django модель User, а группа Administrators характеризуется флагом is_staff. Сам механизм работает, но я получаю 404 Page not found вместо Index page. Есть идеи, как это исправить?

views.py

class CalculationDetailView(LoginRequiredMixin, generic.DetailView):
    model = Calculation
      
    def get_queryset(self, *args, **kwargs):
        qs = super().get_queryset(*args, **kwargs)
        try:
            if not self.request.user.is_staff:
                qs = qs.filter(pk=self.request.user.pk)
            return qs
        except:
           redirect('index')

get_queryset() должен возвращать Queryset. Поэтому вы можете использовать UserPassesTestMixin вместо этого.

from django.contrib.auth.mixins import UserPassesTestMixin

class CalculationDetailView(UserPassesTestMixin, LoginRequiredMixin, generic.DetailView):
    model = Calculation

     def tes_func(self):
        return self.request.user.is_staff

     def handle_no_permission(self):
        return redirect('index')

     def get_queryset(self):
        qs = super().get_queryset()
        if self.request.user.is_staff:                
          qs = qs.filter(pk=self.request.user.pk)
        return qs
        
Вернуться на верх