2011-02-08 7 views
7

の投稿フォーム:ジャンゴ - 私は(ラジオボタンで)選択肢のリストで、シンプルなDjangoのフォームを作っ選択

class MyForm(forms.Form): 
      choices=forms.ChoiceField(widget=forms.RadioSelect(), choices=[(k,k) for k in ['one','two','three']],label="choose one") 

私は、ユーザーがいずれかのオプションを選択したときに自動的に提出するフォームをしたいと思います。単純なHTMLで私はそれをやっただろう

<select name='myselect' onChange="FORM_NAME.submit();"> 
    .... 
    </select> 

しかし私はテンプレートを書くことなくこれをフォームクラスに統合する方法を知らない。具体的には、FORM_NAMEを知る必要がありますので、上記のスニペットでFORM_NAME.submit()と電話することができます。 テンプレートを使用せずに完了できますか?

答えて

14

私はフォーム名を知る必要はないと思います。これは、同様に動作するはずです:

<select name='myselect' onChange="this.form.submit();"> 

迅速な解決をattribute to your widgetを追加伴うだろう、あなたのフォームにこれを統合します。

widget=forms.RadioSelect(attrs={'onchange': 'this.form.submit();'}) 

さて、これが良い(定義、スタイルと動作を分離する)フォーム定義から分離されていない場合は、1つは主張する可能性があり、それはそれを行う必要があります。

+2

要素属性としてのインラインイベント処理?それは過去からの爆発です! jQueryを含めることができ、それを把握することができれば、そのアプローチを使用して、簡単にonChange属性を完全に削除することができます.jQueryを使用してフォームの送信アクションをselect要素変更イベントにバインドします"イベント。 – trojjer

+0

次に、 "onChange"を削除することができます。これは、次のように表示されます: '$(function {){$ id} {id_myselect '属性をHTML タグ(ID付き)は次のようになります。