django - POST后重定向时传递信息

时间:2011-02-06 10:40:57

标签: django forms redirect-after-post

我有一个简单的表单,当提交重定向到成功页面时。

我希望能够在我的成功页面中使用上一步中提交的数据。

据我所知,重定向时无法传递POST数据,那么如何实现呢?

目前我不得不直接从同一个网址返回成功页面,但这会在刷新时导致可怕的重新提交数据。

使用request.session是唯一的方法吗?

2 个答案:

答案 0 :(得分:8)

我一直这样做,不需要会话对象。这是一种非常常见的模式POST-redirect-GET。通常我所做的是:

  1. 拥有一个包含对象列表的视图和一个用于发布数据的表单
  2. 成功发布到该表单会保存数据并生成重定向到对象详细信息视图
  3. 这样您可以在保存后保存POST并重定向。

    示例视图,假设 thingies的模型

    def all_thingies(request, **kwargs):
        if request.POST:
            form = ThingieForm(request.POST)
            if form.is_valid():
                thingie = form.save()
                return HttpResponseRedirect(thingie.get_absolute_url())
        else:
            form = ThingieForm()
        return object_list(request, 
                           queryset = Thingie.objects.all().order_by('-id'),
                           template_name = 'app/thingie-list.html',
                           extra_context = { 'form': form },
                           paginate_by = 10)
    

答案 1 :(得分:7)

你可以:

  1. 在request.session
  2. 中传递数据(完整数据或只是id到对象)
  3. 在网址中重定向类似?id = [id] - 其中[id]指向您的对象。
  4. <强>更新

    关于pt。上面的1,我的意思是你可以做(​​在POST处理程序中):

    my_object = MyModel.objects.create(...)
    request.session['my_object_id'] = my_object.id
    

    或者您可以尝试传递整个对象(它应该可以工作,但我不是100%确定):

    my_object = MyModel.objects.create(...)
    request.session['my_object'] = my_object