Почему 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. Есть идеи ?

Вернуться на верх