J'ai un peu de difficulté à comprendre comment fonctionne la fonction python __init__
(). Ce que j'essaye de faire est de créer un nouveau formulaire dans django, et d'utiliser le helper uni_form pour afficher le formulaire de manière personnalisée en utilisant fieldsets, mais je passe un argument au formulaire qui devrait légèrement changer la disposition du formulaire et je ne peux pas comprendre comment faire ce travail. Voici mon code:django, uni_form et __init __() fonction de python - comment passer des arguments à un formulaire?
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
Cependant, la raison pour laquelle cela ne fonctionne pas pour moi. self.canada ne semble jamais avoir de valeur en dehors de __init__
, et donc même si j'ai passé cet argument à la fonction, je ne peux pas utiliser la valeur de ma classe. J'ai trouvé une solution de contournement pour cela, qui est de créer le formulaire entièrement à l'intérieur de __init__
en utilisant self.fields, mais c'est moche. Comment utiliser self.canada en dehors de __init__
?
Merci pour la réponse Daniel. Rétrospectivement, cela me semble être une question assez amateur, mais vous avez raison, j'étais confus au sujet du fonctionnement des cours. Quoi qu'il en soit, je comprends ce que vous suggérez, sauf que je ne suis pas sûr de savoir comment le faire exactement. Comment ne pas afficher un fieldset quand canada est faux? – hora
Cela dépend probablement de la façon dont vous publiez le formulaire. Je ne sais pas grand-chose sur uni_form - pouvez-vous montrer votre modèle? –
Oh, d'accord. J'ai choisi de ne pas afficher mon formulaire dans le template, j'utilise uni_form pour le générer, donc je ne peux pas le faire de cette façon, mais maintenant que je sais comment fonctionnent les classes en Python, je peux trouver une meilleure façon d'afficher mes formes. Merci! – hora