Перенаправить на конкретный URL вместо 404 в Django - PullRequest
0 голосов
/ 30 апреля 2018

Вместо того, чтобы поднимать Http404 в следующем коде, я хотел бы отправить пользователя по определенному URL ('/ risking / notyours /'). Я пытался использовать HttpResponseRedirect и reverse, но я не могу заставить что-то работать.

Предложения

Код:

class ProspectDelete(LoginRequiredMixin, DeleteView):
    login_url = '/accounts/login/'
    model = Prospect
    template_name = 'risking/prospect_delete.html'
    success_url = reverse_lazy('index')

    def get_object(self, queryset=None):
        """ Hook to ensure object is owned by request.user. """
        obj = super(ProspectDelete, self).get_object()
        if not obj.owner == self.request.user:
            raise Http404 ###This is what I need to change###
        return obj

1 Ответ

0 голосов
/ 30 апреля 2018

Метод get_object должен возвращать экземпляр модели. Вы не можете вернуть ответ перенаправления оттуда.

Один из вариантов - вызвать пользовательское исключение и перехватить его в методе dispatch.

from django.shortcuts import redirect

class WrongOwner(Exception):
    pass

class ProspectDelete(LoginRequiredMixin, DeleteView):
    ...   

    def dispatch(self, request, *args, **kwargs):
        try:
            return super(ProspectDelete, self).dispatch(request, *args, **kwargs)
        except WrongOwner:
            return redirect('/risking/notyours/')

    def get_object(self, queryset=None):
        """ Hook to ensure object is owned by request.user. """
        obj = super(ProspectDelete, self).get_object()
        if not obj.owner == self.request.user:
            raise WrongOwner
        return obj
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...