Champ de formulaire dynamique
salut l'équipe, j'ai visionné les vidéos sur l'utilisation de l'api fetch et j'aimerais m'en inspirer dans un formulaire dont un des champs doit être mis à jour en fonction du choix effectué dans un champ précédent.
J'ai un champ "spécialité" de type liste déroulante et en fonction du choix de celle ci, le champ suivant ("médecin") est actualisé, il est également de type liste déroulante.
Voic à quoi cela ressemble avec l'emploi d'un modelForm :

et voici le code du formulaire séjour :
class CreateSejour(forms.ModelForm):
medecin = forms.ModelChoiceField(queryset=Medecin.objects.none(), required=False)
class Meta:
model = Sejour
fields = '__all__'
widgets = {'date_entree': forms.SelectDateWidget(years=range(2015, 2025)),
'date_sortie': forms.SelectDateWidget(years=range(2015, 2025)),
'motif': forms.Textarea()}
def __init__(self, *args, **kwargs):
super(CreateSejour, self).__init__(*args, **kwargs)
self.fields['medecin'].queryset = Medecin.objects.none()
print(self.data)
if "specialite" in self.data.keys():
print("yess")
try:
specialite_id = int(self.data.get('specialite'))
print(f"specialité {specialite_id}")
self.fields['medecin'].queryset = Medecin.objects.filter(specialite_id=specialite_id).order_by('nom')
print(self.fields['medecin'].queryset)
except (ValueError, TypeError):
pass
elif self.instance.pk and self.instance.specialite:
self.fields['medecin'].queryset = self.instance.specialite.medecin_set.order_by('nom')
J'avoue que je ne vois pas trop comment m'y prendre :
-
dois-je supprimer le champ "médecin" du formulaire et rajouter un formulaire pour ce champs uniquement, qui serait mis à jour en fonction de la spécialité en utilisant fetch?
-
est-ce que la logique doit être déplacée dans la vue et non pas dans le formulaire ?
Merci pour votre aide.
Ali
Salut Ali !
C'est effectivement un cas d'usage courant et intéressant. Ça serait un bon moyen de découvrir HTMX.
Tu peux aussi le faire avec fetch cependant, HTMX est juste une façon plus facile de le faire.
Tu pourrais avoir deux formulaires et deux vues et quand tu sélectionnes une option dans le premier formulaire, détecter ce changement (avec du javascript simple et fetch, ou avec un "trigger" HTMX) et aller chercher dans une autre vue les données du 2e formulaire, en fonction des données du 1er.
Donc oui pour moi le plus logique serait d'avoir un formulaire en deux étapes, plutôt que d'essayer de tout faire dans un formulaire.
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte