【问题标题】:Redirect to url from "post-only" view从“仅发布”视图重定向到 url
【发布时间】:2016-06-16 13:14:09
【问题描述】:

我对 DetailView 和 FormView 的组合进行了以下设置:

class EventBookView(LoginRequiredMixin, View):
    def get(self, request, *args, **kwargs):
        view = EventBookBaseView.as_view()
        return view(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        view = EventBookFormView.as_view()
        return view(request, *args, **kwargs)

class EventBookBaseView(DetailView):
    template_name = "event_book.html"
    model= Event
    context_object_name = 'event'

class EventBookFormView(SingleObjectMixin, FormView):
    template_name = "event_book.html"
    form_class = PersonalInfoForm
    model = Event
    context_object_name = 'event'

    def post(self , request , *args , **kwargs):
        #do stuff
        ...
        return redirect('user_bookings')

很遗憾,重定向到名为“user_bookings”的网址不起作用。如何重定向到该网址?

谢谢!

【问题讨论】:

  • return redirect('user_bookings') 应该可以工作。您还没有真正说出什么“不起作用”,并且您没有在 post 方法中显示任何代码,因此我们无法判断那里发生了什么。尝试使用 EventBookFormView.as_view() 将一个帖子视图包含在另一个帖子视图中有点奇怪,如果可能的话,我会避免这样做。

标签: django url redirect


【解决方案1】:

您可以使用success_url,当表单被正确处理时,视图被重定向。

例如。

class MyFormView(FormView):
    success_url = reverse_lazy('user_bookings')

编辑:将反向更改为 reverse_lazy

【讨论】:

  • 怎么开火呢?我在同一页面上使用了两个经过验证的表单。验证成功后,我想重定向,但不知道怎么做
  • 我宁愿在一个页面上创建自定义表单而不是 2 个表单
  • 我收到了一份数量预订表、一张付款表和一张个人信息表。问题是,我并不总是需要所有这些。如果活动是免费的,则无需支付详细信息。我将两个/三个表单与脆表单结合在一个表单标签中。
  • 所以你需要使用formset(加上django-extra-views的FormSetView)或使用TemplateView +处理所有表单+返回HttpResponseRedirect(reverse(view_name))
【解决方案2】:

POST 方法不应返回重定向。 如果需要,请尝试使用 HttpResponseRedirect。

喜欢:

return HttpResponseRedirect('/user_bookings/')

【讨论】:

  • 那行不通。我想要做的是在成功提交表单后重定向用户。基本上这就是 FormView 中的 success_url 选项的用途,但我不知道如何触发它。
猜你喜欢
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
相关资源
最近更新 更多