DetailView 重定向在 Django 中不起作用
DetailView redirect not working in django
当我尝试从 DetailView 和 CreateView 重定向时,我不断收到反向错误。 我一直收到对象没有属性 pk。我同样尝试使用:args=[str(self.id)]) 但我仍然收到错误。
class check (DetailView)
def get(self, request, *args, **kwargs):
if...:
return reverse('no_edit', kwargs={"pk": self.pk})
您返回的不是重定向,只是 URL,尝试做类似
的事情
return HttpResponseRedirect(reverse(...))
self
是DetailView
对象,确实没有主键。如果你想访问这个对象,你通常可以使用 self.object
,但由于你已经覆盖了 get
方法本身,那也不起作用。
您可以在这里调用 self.get_object()
来修复它,例如:
from django.shortcuts import redirect
class CheckView(DetailView):
# …
def get(self, request, *args, **kwargs):
<b>self.object = self.get_object()</b>
if …:
return redirect('no_edit', pk=<b>self.object.pk</b>)
我们可以在这里利用redirect(..)
[Django-doc]。这将使用 reverse
调用的结果构造一个 HttpResponseRedirect
。
当我尝试从 DetailView 和 CreateView 重定向时,我不断收到反向错误。 我一直收到对象没有属性 pk。我同样尝试使用:args=[str(self.id)]) 但我仍然收到错误。
class check (DetailView)
def get(self, request, *args, **kwargs):
if...:
return reverse('no_edit', kwargs={"pk": self.pk})
您返回的不是重定向,只是 URL,尝试做类似
的事情return HttpResponseRedirect(reverse(...))
self
是DetailView
对象,确实没有主键。如果你想访问这个对象,你通常可以使用 self.object
,但由于你已经覆盖了 get
方法本身,那也不起作用。
您可以在这里调用 self.get_object()
来修复它,例如:
from django.shortcuts import redirect
class CheckView(DetailView):
# …
def get(self, request, *args, **kwargs):
<b>self.object = self.get_object()</b>
if …:
return redirect('no_edit', pk=<b>self.object.pk</b>)
我们可以在这里利用redirect(..)
[Django-doc]。这将使用 reverse
调用的结果构造一个 HttpResponseRedirect
。