Django: Redirect to Detail View after Creation

烈酒焚心 提交于 2021-02-08 06:34:24

问题


I'd like to redirect to a detail view after I successfully submitted a form and created the object.

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})

The error message is:

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

And the URL that's calling is:

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

what I want it to be is

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

Thanks!


回答1:


Instead of trying to render the page, use HttpResponseRedirect instead:

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})



回答2:


just stumbled across the answer. The return should be:

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



来源:https://stackoverflow.com/questions/52598465/django-redirect-to-detail-view-after-creation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!