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(...))

selfDetailView对象,确实没有主键。如果你想访问这个对象,你通常可以使用 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