IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Formulaire et liste déroulante


Sujet :

Django Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Formulaire et liste déroulante
    Bonjour à tous,
    Je vient de passer une formation Django et je souhaiterais maintenant m'exercer sur un petit projet interne.

    Actuellement, j'ai une vue qui interroge une API constructeur (F5 pour info) et qui génère une liste dans une variable appelé lst_virt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def takeoff(request):
        lst_virt = []
        bt = bigsuds.BIGIP(hostname = 'localhost.localdomain', username = 'myuser', password = 'mypassword')
        for virt in bt.LocalLB.Pool.get_list():
            lst_virt.append(virt)
        return render(request, 'index.html',{'lst_virt': lst_virt})
    Maintenant, je souhaiterai pouvoir faire de cette liste, une liste déroulante dans le cadre d'une selection par l'utilisateur.

    J'ai pas mal traîné sur la documentation officielle et plus précisément sur "Forms". Mais j'arrive pas à me mettre la logique en tête pour adapter à mon code ?

    Est-il possible de me mettre sur la voie ?

    merci d'avance de vos infos

  2. #2
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut


    Si j'ai bien compris, cette base de données que tu interroges n'a rien à voir avec TA base de données de ton projet. Je ne pense pas qu'il soit nécessaire de passer par Forms car c'est prévu pour faciliter le travail avec TA base.

    Tu as fait le plus gros du boulot. Ta vue étant prête c'est maintenant dans ton template qu'il va falloir travailler c'est à dire du HTML. Une liste déroulante c'est la balise
    dans laquelle tu viendras y mettre les valeurs souhaitées.

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <select id="maListe1" name="liste">
    <option value="1">Valeur 1</option>
    <option value="2">Valeur 2</option>
    </select>
    Donc en gros, il te suffirait de mettre en place une boucle for qui ajoutera dans ton select les valeurs que tu souhaites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <select id="maListe1" name="liste">
    {% for i in lst_virt %}
        <option value={{ i }}>{{ i }}</option>
    {% endfor %}
    </select>
    Pour aller plus loin, passer une liste simple n'est peut-être pas le plus pratique, notamment si tu veux exploiter la sélection que l'utilisateur fera. Peut-être que passer une liste de dictionnaire de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lst_virt = [{'id': virt_id, 'val': virt}, ....]
    serait plus appropriée.

    Ensuite l'exploitation dans ton template doit pouvoir se faire comme si tu avais travaillé avec Forms.

    Bonne continuation.


    J
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse...
    Je n'avais pas mentionné cette partie dans mon explication mais j'ai déja réussi à transformer cette liste en "liste déroulante" mais en passant par mon template.

    A vrai dire, c'est plutôt pour la récupération de cette donné que je suis perdu.
    Donc tu me conseilles de transformer ma liste en dictionnaire ?

    Avec la méthode que tu m'as indiqué, comment serait-il possible de récupérer la valeur sélectionné par l'utilisateur ?

    Merci en tout cas.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    et désolé pour la réponse tardive.

    Il y a deux choses :
    • Comment récupérer la valeur sélectionnée par l'utilisateur ?
    • Pourquoi passer par un dictionnaire ?


    Tout d'abord pour récupérer cette valeur : comme si tu étais passé pas un Forms, tu dois avoir normalement dans ta view quelques choses comme ça (ou MyForm est importé de forms.py) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def test(request):
        ctx = {}
        if request.method == 'POST':
            myForm = MyForm(request.POST)
            if myForm.is_valid():
                r = myForm.save(commit=False)
                ## ... ici je peux manipuler les éléments de mon formulaire
                r.save()
     
        else : myForm = MyForm()
     
        ctx['myForm'] = myForm
     
        return render(request, 'index.html', ctx)
    Histoire de bien comprendre comment fonctionne Django et comment il traite les request.POST ajoute dans ta view un print. Dans mon cas (Python 3) ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    def test(request):
        ctx = {}
        if request.method == 'POST':
            myForm = MyForm(request.POST)
            if myForm.is_valid():
                r = myForm.save(commit=False)
                print (request.POST)
                ## ... ici je peux manipuler les éléments de mon formulaire
                r.save()
     
        else : myForm = MyForm()
     
        ctx['myForm'] = myForm
     
        return render(request, 'index.html', ctx)

    Tu verras que c'est ni plus ni moins qu'un dictionnaire qui contient les informations rentrées par l'utilisateur de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {name_de_litem_html: valeur_de_lutilisateur}
    Je te laisse deviner ce qui se passera si tu ajoutes dans ton formulaire HTML ta liste déroulante



    À la question pourquoi utiliser une liste de dictionnaires. Tout simplement parce que si tu utilises des valeurs depuis une BDD tu pourras en récupérer l'ID donc unique et t'en servir pour renseigner ton select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value={{ i.id }}>{{ i.val }}</option>
    Tu t'affranchis ainsi d'avoir deux options avec la même value ... et si tu verras que cette value te sera très utile

    J'espère t'avoir aidé mais pas trop non plus chercher c'est le meilleur moyen de comprendre


    Bonne continuation.


    J
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse. C'est cool d'obtenir des explications aussi claires.

    Je vais me remettre dessus cet après midi ou ce soir, je te tiendrais au courant quand j'aurai un peu avancer sur la "logique".

    Encore merci

Discussions similaires

  1. [Formulaire] méchante liste déroulante
    Par choups76 dans le forum IHM
    Réponses: 8
    Dernier message: 19/04/2007, 14h51
  2. Recherche formulaire avec liste déroulante
    Par kimar dans le forum Access
    Réponses: 2
    Dernier message: 28/07/2006, 12h02
  3. Réponses: 9
    Dernier message: 10/07/2006, 14h52
  4. Pb Formulaire avec liste déroulante
    Par Rouanou dans le forum IHM
    Réponses: 12
    Dernier message: 23/11/2005, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo