2010-10-18 43 views
8

我想以編程方式修改Django ModelForm的init()方法中字段的窗口小部件屬性。到目前爲止,我已經嘗試了以下內容如何在ModelForm的__init __()方法中修改控件的屬性?

def __init__(self, *args, **kwargs): 
    super(MyForm, self).__init__(*args, **kwargs) 
    self.fields['my_checkbox'].widget_attrs(forms.CheckboxInput(attrs={'onclick':'return false;'})) 

不幸的是,這是行不通的。有什麼想法嗎?

回答

16
def __init__(self, *args, **kwargs): 
    super(MyForm, self).__init__(*args, **kwargs) 
    self.fields['my_checkbox'].widget.attrs['onclick'] = 'return false;' 
+0

或更好的,attrs ['onclick'] ='返回false'' – 2010-10-18 18:33:19

+1

感謝 - 工作。任何想法「widget_attrs」是什麼意思? – Huuuze 2010-10-18 18:39:35

+0

@Daneil,你能解釋一下嗎? – Huuuze 2010-10-18 18:40:28

1

Bernhard的答案曾用於1.7和之前的版本,但我無法在1.8版本上工作。

但是這個工程:

def __init__(self, *args, **kwargs): 
    super(MyForm, self).__init__(*args, **kwargs) 
    self.fields['my_checkbox'].widget = forms.widgets.Checkbox(attrs={'onclick': 'return false;'}) 
0

我遇到了同樣的問題,因爲詹姆斯林月Django的1.10,但它周圍有通過更新attrs字典,而不是分配一個新的小部件實例。就我而言,我無法保證字典中存在屬性鍵。

def __init__(self, *args, **kwargs): 
    super(MyForm, self).__init__(*args, **kwargs) 
    self.fields['my_checkbox'].widget.attrs.update({'onclick': 'return false;'}) 
相關問題