2011-02-02 179 views
1

我是Django的新手,我有一个包含多个表单并提交按钮的页面。如果提交的数据如何存储其他表单的字段中的数据?通常,当我提交一个,它会重定向到同一页面,但是如果输入的内容丢失了。 谢谢。Django提交多个表单并在提交后保留字段数据输入

这是HTML

<head> 
    <title>Hello</title> 
    <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}/static/tabs.css" /> 
</head> 
<body> 
    <h1>Informacion</h1> 
    <ol id="toc"> 
    <li><a href="#page-1"><span>Page 1</span></a></li> 
    <li><a href="#page-2"><span>Page 2</span></a></li> 
    <li><a href="#page-3"><span>Page 3</span></a></li> 
<li><a href="#page-4"><span>Page 4</span></a></li> 
    </ol> 
    <div class="content" id="page-1"> 
     <h2>Page 1</h2> 
     <p>Text...</p> 
    <form action="." method="POST">{% csrf_token %} 
     <table> 
    {{ form1.as_table }} 
     </table> 
     <p><input type="submit" value="Submit"></p> 
     </form> 
     </div> 
     <div class="content" id="page-2"> 
     <h2>Page 2</h2> 
     <p>Text...</p> 
     <form action="." method="POST">{% csrf_token %} 
    <table> 
    </table> 
    <p><input type="submit" value="Submit"></p> 
     </form> 
     </div> 
     <div class="content" id="page-3"> 
     <h2>Page 3</h2> 
     <p>Text...</p> 
    <form action="." method="POST">{% csrf_token %} 
    <table> 
    {{ form2.as_table}} 
    </table> 
    <p><input type="submit" value="Submit"></p> 
     </form> 
    </div> 
    <div class="content" id="page-4"> 
    <h2>Busqueda</h2> 
    <form action="." method="POST">{% csrf_token %} 
    <table> 
    {{ form2.as_table}} 
    </table> 
    <p><input type="submit" value="S"></p> 

    </div> 
    <script src="{{ MEDIA_URL}}/static/activatables.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
    activatables('page', ['page-1', 'page-2', 'page-3','page-4']); 
    </script> 

    </body> 

那么,有在Java脚本为每个不同的形式做了一些标签,所以我想要做的是,当你submitt数据一个形式,在其他数据其余表格的字段应该保留,所以用户不应该再次输入或丢失。提前致谢。

视图

...

if request.method == 'GET': 
    form1 = HcGinecoForm() 
    form2 = HolaForm() 
else: 
    form1 = HcGinecoForm(request.POST) 
    form2 = HolaForm(request.POST) 
    if form1.is_valid and form2.is_valid(): 
     form1.save() 
     form2.save() 
return render_to_response('polls/hola.html',{ 
          'form2':form2, 
          'form1':form1 
          }) 

它的工作至今...谢谢。

回答

4

为了从一个POST坚持从多种形式的价值,您需要拥有所有字段的一种形式(不使用JavaScript)。

在您的视图操作中,您需要验证每个表单,然后调用它的保存方法。

def my_page(request): 
    if request.method == 'GET': 
     form1 = Form1() 
     form2 = Form2() 
     form3 = Form3() 
    else: 
     form1 = Form1(request.POST) 
     form2 = Form2(request.POST) 
     form3 = Form3(request.POST) 

     if form1.is_valid() and form2.is_valid() and form3.is_valid(): 
      form1.save() 
      form2.save() 
      form3.save() 
    return render_to_response('my_page.html', 
      {'form1' : form1, 'form2' : form2, 'form3' : form3}) 

发布到此操作时,输入到任何这些表单中的值将在发布后保留。如果您不想保留值,则需要创建未从request.POST集合填充的表单的新实例。

0

Jaime,请张贴一些代码片段。

如果您有不同的<form></form>元素,那么您确实没有将服务器的任何POST数据从其他<form> s传递过来,因此无法保留该数据。

考虑将您的表单合并为一个<form>区块。

使用多个django表单,可以通过将prefix参数用于表单构造函数来确保没有名称冲突。

前缀:http://docs.djangoproject.com/en/dev/ref/forms/api/#prefixes-for-forms

+0

如果没有表单模型,是否没有办法保留数据?怎么样? – 2016-08-25 00:21:31