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

Aco*_*orn 5 forms django redirect-after-post

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

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

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

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

是用request.session唯一的方法去?

Car*_*bés 8

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

  1. 有一个带有对象列表的视图和一个用于发布数据的表单
  2. 成功发布到该表单将保存数据并生成重定向到对象详细信息视图

这样,您可以在保存后保存POST并重定向.

一个示例视图,假设一个模型的东西:

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)
Run Code Online (Sandbox Code Playgroud)


Tom*_*ski 7

您可以:

  1. 在request.session中传递数据(完整数据或只是id到对象)
  2. 在URL中重定向类似?id = [id] - 其中[id]指向您的对象.

更新:

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

my_object = MyModel.objects.create(...)
request.session['my_object_id'] = my_object.id
Run Code Online (Sandbox Code Playgroud)

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

my_object = MyModel.objects.create(...)
request.session['my_object'] = my_object
Run Code Online (Sandbox Code Playgroud)