我想以编程方式修改Django 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;'}))
不幸的是,这不起作用。有什么想法吗?
答案 0 :(得分:18)
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['my_checkbox'].widget.attrs['onclick'] = 'return false;'
答案 1 :(得分:2)
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;'})
答案 2 :(得分:0)
我在Django 1.10上遇到了与James Lin相同的问题,但通过更新attrs
字典而不是分配新的小部件实例来解决它。就我而言,我无法保证字典中存在属性键。
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['my_checkbox'].widget.attrs.update({'onclick': 'return false;'})