Мне трудно понять, как работает функция python __init__
(). То, что я пытаюсь сделать, это создать новую форму в django и использовать помощник uni_form для отображения формы настраиваемым способом, используя fieldsets, однако я передаю в форму аргумент, который должен немного изменить макет формы и я не могу понять, как заставить это работать. Вот мой код:
class MyForm(forms.Form):
name = forms.CharField(label=_("Your name"), max_length=100, widget=forms.TextInput())
city = forms.CharField(label=_("Your city"), max_length=100, widget=forms.TextInput())
postal_code = forms.CharField(label=_("Postal code"), max_length=7, widget=forms.TextInput(), required=False)
def __init__(self, city, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
if city == "Vancouver":
self.canada = True
if self.canada:
# create an extra uni_form fieldset that shows the postal code field
else:
# create the form without the postal code field
Однако причина, по которой это не работает для меня. Кажется, что self.canada никогда не имеет никакого значения за пределами __init__
, и поэтому, несмотря на то, что я передал этот аргумент функции, я не могу использовать это значение в своем классе. Я нашел обходной путь для этого, который заключается в создании формы полностью внутри __init__
с использованием self.fields, но это ужасно. Как использовать self.canada вне __init__
?