Я пытаюсь переопределить виджет формы мастера django formtools, но он просто использует стандартный виджет
Я имею следующую форму
class ProviderSignUp1(forms.ModelForm):
class Meta:
model = models.Provider
fields = [
'childcare_type_informal',
'childcare_type_accredited',
]
wigdets = {
'childcare_type_informal': PatchRadioSelect(
attrs={
'class':'form-control'
}
),
'childcare_type_accredited': PatchRadioSelect(
attrs={
'class':'form-control'
}
)
}
def clean(self):
cleaned_data = self.cleaned_data
if cleaned_data['childcare_type_informal'] == True and cleaned_data['childcare_type_accredited'] == True:
raise ValidationError("You must select only one type of childcare")
if cleaned_data['childcare_type_informal'] == False and cleaned_data['childcare_type_accredited'] == False:
raise ValidationError("You must select at least one type of childcare")
return super().clean()
Виджет определяется как
from django.forms.widgets import RadioSelect
class PatchRadioSelect(RadioSelect):
template_name = 'userprofiles/form_widgets/radio.html'
option_template_name = 'userprofiles/form_widgets/radio_option.html'
А мой волшебник:
Мой виджет игнорируется и используется стандартный виджет. Обратите внимание, что я не могу изменить ни один из виджетов из стандартных и могу только добавить атрибуты к существующему виджету. Что я делаю не так?
На всякий случай, если кто-то еще столкнется с такой же проблемой, я обнаружил, что если я определяю __init__ в первой форме в мастере, я могу затем переопределить виджеты в __init__ в любой форме, в которой мне нужно их использовать. Но это не работает, если я не определяю __init__ в первой форме.
Я думаю, что это скорее обходной путь, чем решение.