2011-02-02 178 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