Как я могу изменить атрибуты виджета в методе __init __ () ModelForm? - PullRequest
9 голосов
/ 18 октября 2010

Я хочу программно изменить атрибуты виджета поля в методе init () Django ModelForm. До сих пор я пробовал следующее

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

К сожалению, это не работает. Есть мысли?

Ответы [ 3 ]

18 голосов
/ 18 октября 2010
def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.fields['my_checkbox'].widget.attrs['onclick'] = 'return false;'
2 голосов
/ 12 января 2016

Ответ Бернхарда работал на 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 голосов
/ 02 декабря 2016

Я столкнулся с той же проблемой, что и Джеймс Лин в 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;'})
...