如何在ModelForm的__init __()方法中修改窗口小部件的属性?

时间:2010-10-18 17:58:47

标签: django widget django-forms

我想以编程方式修改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;'}))

不幸的是,这不起作用。有什么想法吗?

3 个答案:

答案 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;'})