Перенаправление DetailView не работает в Django - PullRequest
1 голос
/ 19 октября 2019

Я получаю обратную ошибку, когда пытаюсь перенаправить из 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})

Ответы [ 2 ]

1 голос
/ 19 октября 2019

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 &hellip;:
            return redirect('no_edit', pk=<b>self.object.pk</b>)

Здесь мы можем использовать redirect(..) [Django-doc] . Это создаст HttpResponseRedirect с результатом вызова reverse.

1 голос
/ 19 октября 2019

Вы не возвращаете перенаправление, просто URL, попробуйте сделать что-то вроде

return HttpResponseRedirect(reverse(...))

...