2016-12-15 13 views
0

私はDjangoを使用しています。私はHTML5とブートストラップを使用して大きなフォームを作成しました。私はフォームを生成するためにそれを使用していない場合、私はまだpostメソッドを介してdjangoにフォームを送信することはできますか?私は間違いなくDjangoを使ってフォームをやり直すべきですか?Djangoフォームを使わずにフォームをビルドすることはできますか?

+1

はい、このようにすることができます。私の経験では、主な違いは、Djangoフォームを使用している場合、Djangoフォームのバリデーション用のものをたくさん使うことができるということですが、それらを見栄えの良いものにするために少しでも努力します。 – elethan

+0

私はそう思います。 'form'タグで' action' urlを使い、このURLのビューを作成します –

+0

標準のDjangoフォームがレンダリングされたときの見た目に不満がある場合(これはあまり良くありません)、djangoというパッケージがあります-crispy-formsを使うと、より見栄えを良くすることができます。 –

答えて

2

注:私が本当に知りたいのであれば、これを行うより良い方法があるかもしれません。これは私が過去に行ったことです。

アプリにはまだforms.pyファイルが必要です。 forms.py

​​

その後、あなたのビューのコンテキスト辞書にフォームを置く:

def myView(request): 

    if request.method == "POST": 

     # FORM PROCESSING HERE 

    else: 

     myform = MyForm() #create empty form 

    return render(request, "template.html", {"myform": myForm} 

を今、あなたは追加することができ、あなたのテンプレートで:

 <form id="myForm" name="myFormName" method="post" action="."> 
      {% csrf_token %} 
      {% for field in myform %} 
      {{ field.as_hidden }} 
      {% endfor %} 
     </form> 

この意志あなたのdjangoフォームを表示せずにページに追加してください。すべてのフォーム入力にはID id_fieldNameが与えられます。ここでfieldNameforms.pyファイルで定義したフィールド名です。

ユーザーが「送信」ボタンをクリックしたとき(これは残りのフォームがあると仮定してブートストラップボタンであると仮定しています)。 Jqueryを使用して、ブートストラップフィールドの値を隠しフォームの値に入力できます。

ような何か:

$("#mySubmitButton").click(function() { 

     $("#id_djangoFormField").val($("#myBootstrapFormField").val()); 
     $("#myForm").submit(); 

    } 
); 

これは、ブートストラップからの入力でDjangoのフォームを送信します。これは通常のビューでcleaned_data["fieldName"]を使用して処理できます。

関連する問題