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

Python Discussion :

filtre lte gte [Python 3.X]


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    reconversion
    Inscrit en
    Février 2025
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : reconversion
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2025
    Messages : 9
    Par défaut filtre lte gte
    bonjour, j'ai une question qui me perturbe, je suis en reconversion et sur le sujet que l'on m'a donné, je dois filtrer des données en fonction d'une note d'un chauffeur j'ai donc fait



    normalement le note_moyenne__lte est censé être gte mais dans la pratique c'est lte qui m'affiche le resultat de la note moyenne superieur a ... alors que lte normalement affiche l'inverse,
    ma question est donc pourquoi , le filtre a un effet inverse

    j'apprend le langage python et je suis sur django pour le framwork

    merci de votre attention,

    je viens de voir que les indentations ne sont pas prise en compte ou alors dite moi comment svp ^^
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 994
    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 : 3 994
    Par défaut
    Hello,

    Si au lieu d'utiliser Decimal, tu utilises note_conducteur_decimal = float(note_conducteur)ça donne quoi ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre régulier
    Homme Profil pro
    reconversion
    Inscrit en
    Février 2025
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : reconversion
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2025
    Messages : 9
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Hello,

    Si au lieu d'utiliser Decimal, tu utilises note_conducteur_decimal = float(note_conducteur)ça donne quoi ?

    bonsoir, je perd la possibilité de filtrer par autre chose que des entiers, c'est a dire que mon chauffeur actuel que j'ai crée a une note actuel de 3.9 , si je met float, je ne peux pas filtrer en mettant 3.9 par exemple, uniquement 4, tendis qu'avec le systeme actuel je peux utiliser des decimaux pour le filtrage

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 994
    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 : 3 994
    Par défaut
    et tu essayes d'appliquer le filtre approprié après l'annotation, en utilisant note_moyenne__gte=note_conducteur_decimal pour obtenir les résultats où la note moyenne est supérieure ou égale à la valeur spécifiée ?

    Dans la doc on fait référence à l'ordre.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre régulier
    Homme Profil pro
    reconversion
    Inscrit en
    Février 2025
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : reconversion
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2025
    Messages : 9
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    et tu essayes d'appliquer le filtre approprié après l'annotation, en utilisant note_moyenne__gte=note_conducteur_decimal pour obtenir les résultats où la note moyenne est supérieure ou égale à la valeur spécifiée ?
    en premier lieux j'ai la recherche avec




    j'applique ensuite le filtre si dessus avec (note_moyenne__lte=note_conducteur_decimal)

    ce filtre me retourne les chauffeurs ayant une note superieur, alors que justement il est coder avec lte et non gte, c'est la justement que je ne comprend pas, etant sous lte pourquoi sa m'affiche le resultat inverse? alors que je suis censé utilisé gte.

    je m'explique le but du filtre est de pouvoir afficher le resultat des note egale ou superieur donc normalement gte, or, c'est lte qui le fait, je ne comprend pas pourquoi, la valeur de la note prise en compte est bien la moyenne de mon chauffeur avec le filtre en lte, en dessous de 3.9, j'ai aucun resultat, et a partir de 3.9 jusqu'au max j'ai tout... donc je viens de me rendre compte que le filtre ne fonctionne pas comme sa devrais non plus a partir de l'a note moyenne qui sert de base on dirais, je vais devoir revoir le filtre en entier
    Images attachées Images attachées  

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 994
    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 : 3 994
    Par défaut
    Par contre évite les images, il y a des balises code (#) prévues pour copier ton code.

    J'ai un doute sur tes jointures, petite proposition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Filtrer d'abord les chauffeurs avec une bonne note
    chauffeurs_filtres = User.objects.annotate(
        note_moyenne=Avg("accusé__note")
    ).filter(note_moyenne__gte=note_conducteur_decimal)  # Utiliser gte
     
     
    # Appliquer ce filtre aux trajets
    resultat = resultat.filter(chauffeur__in=chauffeurs_filtres)
    Si les chauffeurs sont corrects mais les trajets affichent des chauffeurs avec une note moyenne incorrecte, alors le problème vient d’une mauvaise jointure dans la requête SQL.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Membre régulier
    Homme Profil pro
    reconversion
    Inscrit en
    Février 2025
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : reconversion
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2025
    Messages : 9
    Par défaut
    désolé pour les image je ne savais pas pour (#) je debarque sur le forum, ta proposition ne fonctionne pas, je pense que je dois avoir un soucis dans ma notation ou dans les jointures comme tu dis, je dois trouver comment faire, merci tout de même de tes reponses


    pour être plus precis ta proposition filtre tous les chauffeur , et n'affiche que ceux en dessous de la note de mon chauffeur, quand je dis tous les chauffeur j'en ai qu'un seul de noter pour le moment, et le filtre ne prend en compte que la note moyenne, donc je dois avoir un soucis du coter de la notation

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 994
    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 : 3 994
    Par défaut
    Ajoute un print(resultat.query) avant et après le filtre pour voir ce qui change.
    Teste la valeur retournée par User.objects.annotate(note_moyenne=Avg("accusé__note")), et assure-toi qu'elle correspond bien à tes attentes.
    Regarde si certains chauffeurs ont une note_moyenne NULL, cela peut fausser le filtre.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  9. #9
    Membre régulier
    Homme Profil pro
    reconversion
    Inscrit en
    Février 2025
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : reconversion
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2025
    Messages : 9
    Par défaut
    je viens d'ajouter d'autre print
    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
     
                print(f"✅ ici commence les print de test")
                note_conducteur_float = float(note_conducteur_decimal)
                chauffeurs = User.objects.annotate(note_moyenne=Avg("accusé__note"))
     
                for chauffeur in chauffeurs:
                    print(f"Chauffeur: {chauffeur.username}, Note Moyenne: {chauffeur.note_moyenne}")
     
                chauffeurs_filtres = User.objects.annotate(note_moyenne=Avg("accusé__note")).filter(note_moyenne__lte=note_conducteur_float)
     
                for chauffeur in chauffeurs_filtres:
                    print(f"✅ Chauffeur Filtré: {chauffeur.username}, Note Moyenne: {chauffeur.note_moyenne}")
                resultat_filtres = resultat.filter(chauffeur__in=User.objects.annotate(note_moyenne=Avg("accusé__note")).filter(note_moyenne__lte=note_conducteur_float))
     
                for trajet in resultat_filtres:
                    print(f"🚗 Trajet ID: {trajet.id}, Chauffeur: {trajet.chauffeur.username}")
                print(f"✅ ici finisse les print de test")
    et voici les log retourner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ✅ ici commence les print de test
    2025-02-08 21:48:33,018_django.db.backends_DEBUG - (0.004) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined", AVG("main_noteuser"."note") AS "note_moyenne" FROM "auth_user" LEFT OUTER JOIN "main_noteuser" ON ("auth_user"."id" = "main_noteuser"."chauffeur_id") GROUP BY "auth_user"."id"; args=(); alias=default
    Chauffeur: setsuna, Note Moyenne: 3.9000000000000000
    Chauffeur: sebastien, Note Moyenne: 0E-20
    Chauffeur: ITSUKI, Note Moyenne: None
    2025-02-08 21:48:33,022_django.db.backends_DEBUG - (0.001) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined", AVG("main_noteuser"."note") AS "note_moyenne" FROM "auth_user" LEFT OUTER JOIN "main_noteuser" ON ("auth_user"."id" = "main_noteuser"."chauffeur_id") GROUP BY "auth_user"."id" HAVING AVG("main_noteuser"."note") <= 3.899999999999999911182158030; args=(Decimal('3.899999999999999911182158030'),); alias=default  
    ✅ Chauffeur Filtré: sebastien, Note Moyenne: 0E-20
    2025-02-08 21:48:33,026_django.db.backends_DEBUG - (0.001) SELECT "main_trajetproposer"."id", "main_trajetproposer"."etat", "main_trajetproposer"."trajet_rembourser", "main_trajetproposer"."chauffeur_id", "main_trajetproposer"."ville_depart", "main_trajetproposer"."ville_arrivee", "main_trajetproposer"."date", "main_trajetproposer"."heure", "main_trajetproposer"."places", "main_trajetproposer"."places_reservees", "main_trajetproposer"."type_moteur", "main_trajetproposer"."prix", "main_trajetproposer"."total_payer", "main_trajetproposer"."temps_trajet", "main_trajetproposer"."commission", "main_trajetproposer"."voiture_id", "main_trajetproposer"."created_at" FROM "main_trajetproposer" WHERE ("main_trajetproposer"."id" IN (49, 50, 51) AND "main_trajetproposer"."chauffeur_id" IN (SELECT U0."id" FROM "auth_user" U0 LEFT OUTER JOIN "main_noteuser" U1 ON (U0."id" = U1."chauffeur_id") GROUP BY U0."id" HAVING AVG(U1."note") <= 3.9) AND "main_trajetproposer"."chauffeur_id" IN (SELECT U0."id" FROM "auth_user" U0 LEFT OUTER JOIN "main_noteuser" U1 ON (U0."id" = U1."chauffeur_id") GROUP BY U0."id" HAVING AVG(U1."note") <= 3.899999999999999911182158030)); args=(49, 50, 51, Decimal('3.9'), Decimal('3.899999999999999911182158030')); alias=default
    ✅ ici finisse les print de test

    je tiens a preciser que c'est avec mon code d'origine et non avec ta proposition

  10. #10
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 994
    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 : 3 994
    Par défaut
    None (NULL en SQL) est ignoré par la plupart des comparaisons (lte et gte).
    Cela signifie que ITSUKI ne sera pas filtré.

    Vérifie si None est exclu du filtrage, avec un petit debug

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    seuil = Decimal("3.5")
     
    chauffeurs_filtres = User.objects.annotate(
        note_moyenne=Avg("accusé__note")
    ).filter(note_moyenne__lte=seuil).exclude(note_moyenne__isnull=True)
     
     
    for chauffeur in chauffeurs_filtres:
        print(f"Chauffeur filtré après exclusion des NULL : {chauffeur.username}, Note Moyenne: {chauffeur.note_moyenne}")
    Si setsuna disparaît avec .exclude(note_moyenne__isnull=True), alors le problème venait de NULL.

    Aussi ce Decimal me dérange, peux-tu convertir proprement la valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    note_conducteur_decimal = Decimal(str(note_conducteur)).quantize(Decimal('0.1'))
    Si le problème venait d'une comparaison incorrecte due à des décimales trop précises, cela devrait le corriger.

    Si c'est rien de tout ça, je te rejoins sur le problème de jointure.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  11. #11
    Membre régulier
    Homme Profil pro
    reconversion
    Inscrit en
    Février 2025
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : reconversion
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2025
    Messages : 9
    Par défaut
    avant quantize que je ne connais pas encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    2025-02-08 22:27:38,677_django.db.backends_DEBUG - (0.000) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined", AVG("main_noteuser"."note") AS "note_moyenne" FROM "auth_user" LEFT OUTER JOIN "main_noteuser" ON ("auth_user"."id" = "main_noteuser"."chauffeur_id") GROUP BY "auth_user"."id" HAVING AVG("main_noteuser"."note") <= 4.200000000000000177635683940; args=(Decimal('4.200000000000000177635683940'),); alias=default
    ✅ Chauffeur Filtré: setsuna, Note Moyenne: 3.9000000000000000
    ✅ Chauffeur Filtré: sebastien, Note Moyenne: 0E-20
    2025-02-08 22:27:38,679_django.db.backends_DEBUG - (0.001) SELECT "main_trajetproposer"."id", "main_trajetproposer"."etat", "main_trajetproposer"."trajet_rembourser", "main_trajetproposer"."chauffeur_id", "main_trajetproposer"."ville_depart", "main_trajetproposer"."ville_arrivee", "main_trajetproposer"."date", "main_trajetproposer"."heure", "main_trajetproposer"."places", "main_trajetproposer"."places_reservees", "main_trajetproposer"."type_moteur", "main_trajetproposer"."prix", "main_trajetproposer"."total_payer", "main_trajetproposer"."temps_trajet", "main_trajetproposer"."commission", "main_trajetproposer"."voiture_id", "main_trajetproposer"."created_at" FROM "main_trajetproposer" WHERE ("main_trajetproposer"."id" IN (49, 50, 51) AND "main_trajetproposer"."chauffeur_id" IN (SELECT U0."id" FROM "auth_user" U0 LEFT OUTER JOIN "main_noteuser" U1 ON (U0."id" = U1."chauffeur_id") GROUP BY U0."id" HAVING AVG(U1."note") <= 4.2) AND "main_trajetproposer"."chauffeur_id" IN (SELECT U0."id" FROM "auth_user" U0 LEFT OUTER JOIN "main_noteuser" U1 ON (U0."id" = U1."chauffeur_id") GROUP BY U0."id" HAVING AVG(U1."note") <= 4.200000000000000177635683940)); args=(49, 50, 51, Decimal('4.2'), Decimal('4.200000000000000177635683940')); alias=default
    2025-02-08 22:27:38,680_django.db.backends_DEBUG - (0.000) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."id" = 9 LIMIT 21; args=(9,); alias=default
    🚗 Trajet ID: 49, Chauffeur: setsuna
    2025-02-08 22:27:38,681_django.db.backends_DEBUG - (0.000) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."id" = 9 LIMIT 21; args=(9,); alias=default
    🚗 Trajet ID: 50, Chauffeur: setsuna
    2025-02-08 22:27:38,682_django.db.backends_DEBUG - (0.000) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."id" = 9 LIMIT 21; args=(9,); alias=default
    🚗 Trajet ID: 51, Chauffeur: setsuna
    2025-02-08 22:27:38,683_django.db.backends_DEBUG - (0.000) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined", AVG("main_noteuser"."note") AS "note_moyenne" FROM "auth_user" LEFT OUTER JOIN "main_noteuser" ON ("auth_user"."id" = "main_noteuser"."chauffeur_id") GROUP BY "auth_user"."id" HAVING (AVG("main_noteuser"."note") <= 3.5 AND NOT (AVG("main_noteuser"."note") IS NULL)); args=(Decimal('3.5'),); alias=default
    Chauffeur filtré après exclusion des NULL : sebastien, Note Moyenne: 0E-20
    ✅ ici finisse les print de test
    et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                    if note_conducteur:
                        note_conducteur_decimal = Decimal(str(note_conducteur)).quantize(Decimal('0.1'))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ✅ ici commence les print de test
    2025-02-08 22:32:04,500_django.db.backends_DEBUG - (0.004) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined", AVG("main_noteuser"."note") AS "note_moyenne" FROM "auth_user" LEFT OUTER JOIN "main_noteuser" ON ("auth_user"."id" = "main_noteuser"."chauffeur_id") GROUP BY "auth_user"."id"; args=(); alias=default
    Chauffeur: setsuna, Note Moyenne: 3.9000000000000000
    Chauffeur: sebastien, Note Moyenne: 0E-20
    Chauffeur: ITSUKI, Note Moyenne: None
    2025-02-08 22:32:04,505_django.db.backends_DEBUG - (0.001) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined", AVG("main_noteuser"."note") AS "note_moyenne" FROM "auth_user" LEFT OUTER JOIN "main_noteuser" ON ("auth_user"."id" = "main_noteuser"."chauffeur_id") GROUP BY "auth_user"."id" HAVING AVG("main_noteuser"."note") <= 3.899999999999999911182158030; args=(Decimal('3.899999999999999911182158030'),); alias=default
    ✅ Chauffeur Filtré: sebastien, Note Moyenne: 0E-20
    2025-02-08 22:32:04,512_django.db.backends_DEBUG - (0.002) SELECT "main_trajetproposer"."id", "main_trajetproposer"."etat", "main_trajetproposer"."trajet_rembourser", "main_trajetproposer"."chauffeur_id", "main_trajetproposer"."ville_depart", "main_trajetproposer"."ville_arrivee", "main_trajetproposer"."date", "main_trajetproposer"."heure", "main_trajetproposer"."places", "main_trajetproposer"."places_reservees", "main_trajetproposer"."type_moteur", "main_trajetproposer"."prix", "main_trajetproposer"."total_payer", "main_trajetproposer"."temps_trajet", "main_trajetproposer"."commission", "main_trajetproposer"."voiture_id", "main_trajetproposer"."created_at" FROM "main_trajetproposer" WHERE ("main_trajetproposer"."id" IN (49, 50, 51) AND "main_trajetproposer"."chauffeur_id" IN (SELECT U0."id" FROM "auth_user" U0 LEFT OUTER JOIN "main_noteuser" U1 ON (U0."id" = U1."chauffeur_id") GROUP BY U0."id" HAVING AVG(U1."note") <= 3.9) AND "main_trajetproposer"."chauffeur_id" IN (SELECT U0."id" FROM "auth_user" U0 LEFT OUTER JOIN "main_noteuser" U1 ON (U0."id" = U1."chauffeur_id") GROUP BY U0."id" HAVING AVG(U1."note") <= 3.899999999999999911182158030)); args=(49, 50, 51, Decimal('3.9'), Decimal('3.899999999999999911182158030')); alias=default
    2025-02-08 22:32:04,515_django.db.backends_DEBUG - (0.001) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined", AVG("main_noteuser"."note") AS "note_moyenne" FROM "auth_user" LEFT OUTER JOIN "main_noteuser" ON ("auth_user"."id" = "main_noteuser"."chauffeur_id") GROUP BY "auth_user"."id" HAVING (AVG("main_noteuser"."note") <= 3.5 AND NOT (AVG("main_noteuser"."note") IS NULL)); args=(Decimal('3.5'),); alias=default
    Chauffeur filtré après exclusion des NULL : sebastien, Note Moyenne: 0E-20
    ✅ ici finisse les print de test
    je ne vois pas la difference avec quantize , je vais apprendre ce que c'est de mon côté, c'est la premiere fois que le vois, sinon niveau filtrage a 3.9 je vois setsuna qui a une note moyen de 3.9 et jusqu'a 5, le max, et a 3.8 d'entré au filtre, plus rien



    de ce que j'ai l'impression, mon code force le filtrage a partir de la note moyenne la plus élevé, je vais le revoir... si j'arrive a faire la moyenne, les chemins sont bon, c'est le calcul qui ne l'est pas

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 994
    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 : 3 994
    Par défaut
    En réalité, le filtre n’est pas inversé :

    • 3.9 <= 3.9 est vrai, donc 3.9 passe le filtre lte=3.9.
    • 3.9 <= 3.8 est faux, donc 3.9 ne passe pas le filtre lte=3.8.

    C’est exactement ce qu’on attend d’un opérateur « inférieur ou égal ».
    Autrement dit, si le chauffeur a une moyenne de 3.9 :

    1. Avec .filter(note_moyenne__lte=3.9), il est inclus.
    2. Avec .filter(note_moyenne__lte=3.8), il est exclu.

    Cela peut prêter à confusion si tu penses rechercher un chauffeur ayant une note supérieure à 3.8. En fait, lte=3.8 va forcément ignorer les notes de 3.9, 4, 4.5, etc.

    En conclusion, si tu veux un seuil minimal (“supérieur ou égal à …”), tu dois mettre gte=….
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  13. #13
    Membre régulier
    Homme Profil pro
    reconversion
    Inscrit en
    Février 2025
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : reconversion
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2025
    Messages : 9
    Par défaut
    je comprend ce que tu veux dire mais moi, ce que je veux a la base, c'est qu'un utilisateur entre une note minimal pour la recherche, que je me retrouve avec note_minimal_utilisateur_voulu ==> chauffeur ayant cette note_minimal et plus donc un gte et pour comparer j'ai fait un calcul de la note moyenne et sa bloque ici


    le filtre actuel bloque sur la note moyenne, je ne m'y connais pas encore asser dans le code pour formuler la chose correctement... désolé

  14. #14
    Membre régulier
    Homme Profil pro
    reconversion
    Inscrit en
    Février 2025
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : reconversion
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2025
    Messages : 9
    Par défaut
    ok je me compliqué trop la vie...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    note_minimum = filtre_form.cleaned_data["note"]
                    chauffeurs = User.objects.annotate(
                        note_moyenne=Avg("accusé__note")
                    ).filter(note_moyenne__gte=note_minimum)

    donc ta proposition du debut etais quasiement juste... je m'excuse pour la perte de temps ^^' et merci de tes reponses, j'affiche bien mon chauffeur avec le note entré...

  15. #15
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 994
    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 : 3 994
    Par défaut
    donc ta proposition du debut etais quasiement juste
    C'est ça !

    merci de tes reponses, j'affiche bien mon chauffeur avec le note entré...
    C'est l'essentiel

    je m'excuse pour la perte de temps
    C'est pas une perte de temps si tu apprends, ça ne m'a pas dérangé en ce qui me concerne...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  16. #16
    Membre régulier
    Homme Profil pro
    reconversion
    Inscrit en
    Février 2025
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : reconversion
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2025
    Messages : 9
    Par défaut
    En effet j'apprends, et je dois apprendre a être plus attentif surtout. Je fais trop d'erreurs bêtes du à de l'innatention ou alors je complique trop les choses XD ...

    Il me faut trouvé le juste milieu

    Merci en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Algorithme d'un filtre ?
    Par Vince78 dans le forum Algorithmes et structures de données
    Réponses: 17
    Dernier message: 04/09/2002, 16h54
  2. recherche filtre flou gaussien
    Par gimlithedwarf dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2002, 23h32
  3. TADOTable et filtre
    Par GaL dans le forum C++Builder
    Réponses: 16
    Dernier message: 02/07/2002, 17h52
  4. Filtre passe Bande
    Par Mau dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 28/06/2002, 18h03
  5. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 11h43

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