2011-02-08 55 views
7

後的形式我做了一個簡單的Django的形式,用一個選擇列表(單選按鈕):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();'}) 

人們可以爭辯說,如果這是不是更好從你的表單定義(分離的定義,風格和行爲)分開,而是應該這樣做。

+2

將內聯事件處理作爲元素屬性?這是過去的一個爆炸!如果你可以包含jQuery並掌握它,我會採用這種方法,它允許你完全輕鬆地刪除onChange屬性,以支持通過jQuery「文檔準備好將表單提交動作綁定到select元素更改事件「事件。這更好地顯示爲:`$(function(){$('#id_myselect')。change(function(){this.form.submit();})});` – trojjer 2013-01-14 14:35:36