2011-02-02 14 views
1

私はDjangoを使い始めました。私はいくつかのフォームと送信ボタンがあるページを持っています。送信されたデータを他のフォームのフィールドに保存するにはどうすればよいですか?通常、私は1つを提出すると、同じページにリダイレクトされますが、何かがフィールドに入力された場合は失われます。おかげさまで 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

1つのPOSTから複数のフォームからの値を保持するために、あなたは(JavaScriptを使用せずに)1つのフォーム内のフィールドのすべてを持っている必要があります。

各ビューアクションでは、各フォームを検証してからsaveメソッドを呼び出す必要があります。

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>要素がある場合は、文字どおり、サーバーに他の<form>のPOSTデータを渡すことはありません。そのため、保存する方法はありません。

フォームを1つの<form>ブロックに結合することを検討してください。

複数のdjangoフォームを使用すると、フォームコンストラクタにprefix引数を使用して名前の競合がないことを確認できます。

プレフィックス:http://docs.djangoproject.com/en/dev/ref/forms/api/#prefixes-for-forms

+0

フォームのモデルを持たずにデータを保存する方法はありませんか?クッキーはどうですか? –

+1

あなたの基準に合った永続化メソッドを使用することができます。例えば、重要ではない重要な情報用のクッキー(「保存するといいかもしれませんが、絶対に必要ではありません」など)。この情報は、クッキーにすでに結び付けられているセッションバックエンド(dbに保存可能)に保存できます。 request.session ['saved-form-data-in-session-backend'] ..空が限界です! –

関連する問題