Перенаправление пользователя на индекс после снятия ограничения
У меня есть две группы пользователей Администраторы и Клиенты, и я пытаюсь перенаправить пользователей из группы Клиенты на индексную страницу, если они попытаются получить доступ к детальному просмотру вычислений, которые им не принадлежат. Я все еще хочу позволить администраторам просматривать детали расчетов всех пользователей. Я использую встроенную в 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