Django: перенаправление в детальный вид после создания - PullRequest
0 голосов
/ 01 октября 2018

Я бы хотел перенаправить в подробный вид после того, как я успешно отправил форму и создал объект.

My view.py

class ObjectCreateView(CreateView):
    model = Object
    form_class = ObjectCreateForm
    template_name = 'frontend/base/object_create.html'

  def get(self, request, *args, **kwargs):
      form = ForecastConfigurationCreateForm()
      form.fields['status'] = ModelChoiceField(queryset=ObjectStatus.get_object_status_list(self))
      return render(request, self.template_name, {'form': form})

  def post(self, request, *args, **kwargs):
      form = self.form_class(request.POST)
      if form.is_valid():
          self.fcc_form = form.save(commit=True)
          messages.add_message(self.request, messages.INFO, 'Good job!')
          return render_to_response(reverse(viewname='object_detail', kwargs={'uuid': self.fcc_form.uuid}))
      else:
          messages.add_message(self.request, messages.ERROR, 'Error!')
          return render(request, self.template_name, {'form': form})

Сообщение об ошибке:

TemplateDoesNotExist в / object_create / / object_detail / 3a3d6279-1531-45d4-9ba9-b691886facf4 /

И вызывающий URL-адрес:

http://test.com:8000/object_create/?next=/object_detail/a5b2a693-6f90-4b98-b9a2-fc2fe6a90995/

я хочу, чтобы он был

http://test.com:8000/object_detail/a5b2a693-6f90-4b98-b9a2-fc2fe6a90995/

Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

просто наткнулся на ответ.Возврат должен быть:

return redirect(reverse('object_detail', kwargs={'uuid': self.fcc_form.uuid}))

0 голосов
/ 01 октября 2018

Вместо того, чтобы пытаться отобразить страницу, используйте HttpResponseRedirect вместо:

class ObjectCreateView(CreateView):
    ...

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            self.fcc_form = form.save(commit=True)
            messages.add_message(self.request, messages.INFO, 'Good job!')
            return HttpResponseRedirect(reverse('object_detail', kwargs={'uuid': self.fcc_form.uuid}))
        else:
            messages.add_message(self.request, messages.ERROR, 'Error!')
            return render(request, self.template_name, {'form': form})
...