Почему LoginRequiredMixin не останавливает мой поток диспетчеризации, когда пользователь не аутентифицирован
Я понятия не имею, почему в этом представлении диспетчеризация не заканчивается после super():
class CreateBookView(LoginRequiredMixin, CreateView):
template_name = 'library/create_book.html'
form_class = BookForm
def dispatch(self, request, *args, **kwargs):
result = super().dispatch(request, *args, **kwargs)
if self.request.user.is_authenticated and not self.request.user.contactform.is_completed:
return redirect(reverse_lazy('edit_contacts') + f"?next={self.request.path}#edit")
return result
def form_valid(self, form):
form.instance.owner = self.request.user
form.instance.category = self._set_category(form)
return super().form_valid(form)
def get_success_url(self):
pk = self.request.user.pk
default_redirect = reverse_lazy('show_books_dashboard', kwargs={'pk': pk})
next_page = self.request.GET.get('next')
return next_page if next_page else default_redirect
@staticmethod
def _set_category(form):
category = form.cleaned_data.get('category')
category_name = form.cleaned_data.get('category_name')
if category or not category_name:
return category
new_category, created = Category.objects.get_or_create(name=category_name)
return new_category
Но в этом он работает так, как я ожидал, и заканчиваем его:
class DetailsNotificationView(LoginRequiredMixin, AuthorizationRequiredMixin, DetailView):
model = Notification
context_object_name = 'notification'
template_name = 'common/notifications/notifications_details.html'
authorizing_fields = ['recipient']
def dispatch(self, request, *args, **kwargs):
result = super().dispatch(request, *args, **kwargs)
notification = self.get_object()
notification.is_read = True
notification.save()
if notification.offer:
return redirect('show_offer_details', pk=notification.offer.pk)
return result
Я ожидаю, что LoginRequiredMixin обработает ошибку сразу после super(), когда пользователь не аутентифицирован, и остановит поток диспетчеризации. Я не могу понять, почему он не работает так, как ожидается в CreateBookView. Есть идеи ?