Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

django - formulaire - dépendances des champs

+1 vote

Je souhaite faire un formulaire qui affiche 2 listes déroulantes.

la première contient les pays, la deuxième les villes du pays sélectionné.

fichier models.py :

class Pays(model.Model):
 name = models.CharField(max_length=200)
 description = models.TextField()

class villes(models.Model):
  name = models.CharField(max_length=200)
  description = models.TextField()
  pays = models.ForeignKey(Pays)

class Pays_Villes(models.Model):
   pays = models.ForeignKey(Pays)
   villes = models.ForeignKey(Villes)

fichier form.py :

class Pays_VillesForm(forms.ModelForm):
  class Meta:
     model = Pays_Villes
     fields = ('pays', 'villes', )

Actuellement j'arrive à afficher les pays et les villes. Mais je n'arrive pas à récupérer que les villes d'un pays

demandé 21-Mar-2016 par anonyme

Il faut faire du JavaScript qui declendera un filtrage des villes pour le pays sélectionné

1 Réponse

+2 votes

Comme suggéré par @foxmask, il faut effectivement passer par du javascript côté client, puisque au moment ou tu instancie ton formulaire sur le serveur, l'utilisateur n'a pas encore sélectionné le pays désiré et tu ne peux donc pas envoyer un formulaire pré filtré à l'utilisateur.

Si tu ne souhaite pas utiliser de javascript, une autre façon d'arriver au même résultat est d'utiliser le FormWizard (qui était built-in dans django jusqu'à la 1.7 puis qui a été splitté dans un package indépendant par la suite) pour générer un formulaire en deux étapes:

  1. L'utilisateur choisit un pays et valide un premier formulaire
  2. Le serveur répond en fournissant un deuxième formulaire, pour la ville, cette fois

Avec cet outil là, rien ne t'empèche d'utiliser l'entrée de l'utilisateur du premier formulaire pour filtrer les villes affichées dans le second.

répondu 30-Mar-2016 par eliotberriot (678 points)
...