我希望将用户发送到特定的URL('/ risk / notyours /'),而不是在下面的代码中提升Http404。我曾尝试使用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
答案 0 :(得分:1)
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