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 :

DJANGO - Mise à jour multiple row avec multiple case à cocher


Sujet :

Django Python

  1. #1
    Membre averti
    Homme Profil pro
    Ouvrier
    Inscrit en
    Décembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Décembre 2006
    Messages : 50
    Par défaut DJANGO - Mise à jour multiple row avec multiple case à cocher
    Bonjour les gens et bons réveillons,

    Comme dit dans le titre, dans un tableau, je voudrais pouvoir en une fois mettre à jour de multiples enregistrements suivant la valeur de leurs cases à cocher.

    avec cet exemple, si je comprend bien, j'enregistre toutes les cases à cocher à "True"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nomin.objects.filter(id__in=list_id).update(gravee=True)
    mais dans le tableau, il peut y avoir des mises à jour de cases cochées et non cochées.

    Comment envoyer leur valeur et mettre à jour leurs champs?

    Merci d'avance pour votre aide et avec un petit peu d'avance, je vous souhaite une bonne année.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Bonjour,

    avec cet exemple, si je comprend bien, j'enregistre toutes les cases à cocher à "True"


    Non vous enregistrez toutes les cases à cocher dont les ID sont dans la liste
    list_id

    mais dans le tableau, il peut y avoir des mises à jour de cases cochées et non cochées.


    et donc quels critères pour savoir quelles sont les cases à mettre à jour ?

    Au pire vous faîtes une boucle sur le résultat de votre requête filter.

  3. #3
    Membre averti
    Homme Profil pro
    Ouvrier
    Inscrit en
    Décembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Décembre 2006
    Messages : 50
    Par défaut
    Bonjour Fred et merci pour ta réponse.



    En fait, je me suis mal exprimer.

    pour:

    Non vous enregistrez toutes les cases à cocher dont les ID sont dans la liste list_id
    en disant "toutes", c'est bien ce qui est dans list_id



    Mais dans list_id il peut y avoir en même temps des cases cochées et des non cochées mais dans le critère de .update(gravee=True), c'est soit tout à "True", soit tout à "False"



    donc, comment faire pour savoir les enregistrement à updater à "True" et ceux à "False"



    J'espère m'être mieux fait comprendre.

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Bonjour
    Citation Envoyé par bigbib Voir le message
    mais dans le critère de .update(gravee=True), c'est soit tout à "True", soit tout à "False"
    donc, comment faire pour savoir les enregistrement à updater à "True" et ceux à "False"

    J'espère m'être mieux fait comprendre.
    perdu
    ".update(gravee=)" n'est pas un critère ! ici, le critère que tu donnes est la liste d'identifiants.
    Nous ne pouvons deviner "le critère" que tu désirerais. Peut-être que tu ne désires que un switch ? passer les True à False et inversement ? Alors le critère est le contenu du champ "gravee"

    bd.filtrer(age>12).filtrer("gravé"=ok).Action_sur_ces_criteres("gravé"=non)
    bd.filtrer(age<12).filtrer("gravé"=ok).Action_sur_ces_criteres("gravé"=vide)
    bd.filtrer(age>12).filtrer("gravé"=non).Action_sur_ces_criteres("gravé"=oui)

  5. #5
    Membre averti
    Homme Profil pro
    Ouvrier
    Inscrit en
    Décembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Décembre 2006
    Messages : 50
    Par défaut
    j'y arriverais

    Nom : Capture d'écran_20221227_211358.png
Affichages : 323
Taille : 18,3 Ko

    au final, je voudrais que les cases que je cocherais et décocherais suivant les cas se mettent à jour dans la base de données quand je clique sur "Editer" en sachant que c'est une mise à jour des champs

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Bonjour,

    Au plus complexe, on peut sans doute le faire en Ajax ou possiblement dans une vue en vérifiant chaque valeur des cases à cocher pour chaque personne, ce qui implique une boucle... Peut-être que la manière dont a été créé le formulaire peut aider.

  7. #7
    Membre averti
    Homme Profil pro
    Ouvrier
    Inscrit en
    Décembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Décembre 2006
    Messages : 50
    Par défaut
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <form method="POST" action="edit">
        {% csrf_token %}
        <div> 
            <button type="submit" class="btn btn-secondary" value="Save">Editer</button>
        </div>
        <table class="table table-info table-striped rounded rounded-3 overflow-hidden">
            <thead class="table-dark">
                <tr>
                    <th scope="col" class="text-center">Gravée</th>
                    <th scope="col" class="text-center">Placée</th>
                    <th scope="col" class="text-center">Nom</th>
                    <th scope="col" class="text-center">Note</th>
                </tr>
            </thead>
            <tbody>
                {% for nom in Nominettes %}
                    <tr class="fw-light" style="font-size:small;">
                        {% if nom.gravee == True %}
                        <td class="text-center" style="width:30px;">
                            <input class="form-check-input" type="checkbox" value="{{nom.id}}" name="case_gravee" id="gravee" checked />
                        </td>
                        {% else %}
                        <td class="text-center" style="width:30px;">
                            <input class="form-check-input" type="checkbox" value="{{nom.id}}" name="case_gravee" id="gravee" />
                        </td>
                        {% endif %}
                        {% if nom.placee == True %}
                        <td class="text-center" style="width:30px;">
                            <input class="form-check-input" type="checkbox" value="{{nom.id}}" name="case_placee" id="placee" checked />
                        </td>
                        {% else %}
                        <td class="text-center" style="width:30px;">
                            <input class="form-check-input" type="checkbox" value="{{nom.id}}" name="case_placee" id="placee" />
                        </td>
                        {% endif %} 
                        <td class="text-center" style="font-weight: bold; width: 200px;" name="nom">{{ nom.nom }} {{ nom.prenom }}</td>
                        <td class="text-center" style="width:250px;">{{ nom.note }}</td>
                    </tr>
                {% endfor %}
            </tbody>
        </table>
    </form>

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Ok, et la vue qui permet de recevoir les informations ?

  9. #9
    Membre averti
    Homme Profil pro
    Ouvrier
    Inscrit en
    Décembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Décembre 2006
    Messages : 50
    Par défaut
    Bonsoir tout le monde,
    Fred, pour la views du form de la mise à jour, je n'ai encore rien.
    J'ai juste pour l'affichage de la liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def nominettes_list(request):
        nominettes = Nominettes.objects.order_by('datecreation').reverse()
        return render(request, 'nominettes/nominettes_list.html', {'Nominettes': nominettes})

  10. #10
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Citation Envoyé par bigbib Voir le message
    Bonsoir tout le monde,
    Fred, pour la views du form de la mise à jour, je n'ai encore rien.
    J'ai juste pour l'affichage de la liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def nominettes_list(request):
        nominettes = Nominettes.objects.order_by('datecreation').reverse()
        return render(request, 'nominettes/nominettes_list.html', {'Nominettes': nominettes})
    Je parlais plutôt de la vue qui récupère les informations modifiées lors de l'enregistrement de tes modifications.

  11. #11
    Membre averti
    Homme Profil pro
    Ouvrier
    Inscrit en
    Décembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Décembre 2006
    Messages : 50
    Par défaut
    Bonjour Fred, désolé du retard, petit ennuis de santé

    Citation Envoyé par fred1599 Voir le message
    Je parlais plutôt de la vue qui récupère les informations modifiées lors de l'enregistrement de tes modifications.
    comme je disais plus haut, je n'ai pas d'autre vue car une fois les données enregistrées, j'actualise le tableau du form et je reste sur cette page.

  12. #12
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par bigbib Voir le message
    je n'ai pas d'autre vue car une fois les données enregistrées
    pas clair car ta demande est justement d'enregistrer les données (depuis ton formulaire). Et tu sembles dire que tu n'as même pas essayé puisque pas écrit une ligne ...

    Tu ne peux enregistrer que ce que te donne le formulaire ! Tu as déjà écrit le formulaire donc tu as déjà fait un choix des données que tu passes, si il en manque, c'est à toi d'en passer d'autres (input cachés /ou/ ajax /ou/ ?)

    Dans ce que tu retournes actuellement, tu as bien que les enregistrements avec un champ "True"
    Tu pourrais au moins écrire une fonction à la réception de ton POST ! Ensuite, si les datas envoyées ne sont pas suffisantes pour toi, tu adaptes ton formulaire (parfois/souvent on va utiliser du javascript)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # je réceptionne 2 listes de produit.id
    print("placées", request.POST.getlist('case_placee'))
    print("gravées", request.POST.getlist('case_gravee'))
    # actuellement dans ta logique
    #1) mettre tout à False,  (tout quoi ???)
    #2) les id "cases_placées" placee = True
    #3) les id "cases_gravées" gravee = True
    ps: je suppose que la logique métier impose "placcée" si "gravée"

Discussions similaires

  1. [MySQL] Mise à jour multiple depuis un tableau
    Par robinmaret dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 04/12/2009, 10h07
  2. Mise à jour avec des cases à cocher
    Par jiojio dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/02/2009, 11h53
  3. Réponses: 6
    Dernier message: 29/05/2006, 14h22
  4. Réponses: 3
    Dernier message: 15/11/2005, 18h50
  5. Problème de mise à jour de données avec IBClientDataset
    Par Papino dans le forum Bases de données
    Réponses: 6
    Dernier message: 26/09/2005, 14h04

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