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 :

Afficher les résultats d'une table selon la clé étrangère


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Par défaut Afficher les résultats d'une table selon la clé étrangère
    bonjour
    je suis nouveau sur le framwork django, je suis entraint de consevoire mon premier projet , et la je galaire grave avec les models car j'ai deux tables "users" et "course"
    et la table "course" contient une cles etrangere de la table "users" et pour afficher les courses cree par un user , j'ai essaier avec select_related mais une erreur de la page s'affiche :
    Exception Type: FieldError
    Exception Value:

    Invalid field name(s) given in select_related: 'Course.users_idusers'. Choices are: (none)
    je pense que c'est moi qui s'est mal pris , voici a vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def course (request):
        courses = Course.objects.all()
        g = Users.objects.select_related('Course')
        return render( request,'cu.html',{'cours':courses,'pseud':g})
    merci d'avance pour votres aides

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

    Désolé du temps de réponse... As-tu trouvé une solution à ton problème ?

  3. #3
    Membre très actif Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Par défaut
    j'ai essaiyer la methode connection de django avec le cursor mais a la fin j'obtien une liste que je ne peut pas appeller les champs dans le templaite :
    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
     
    def course (request):
        course=[]
        cu=connection.cursor()
        cu.execute("select date_cours , pseudo   from users inner join course on users.idusers = course.users_idusers")
        for li  in cu :
            course.append(li)
     
        d={}
     
        for i in course:
            d["date"]=str(i[0])
            d["pseud"]=i[1]
            #print(str(i[0])+ '             ' + i[1])
     
        return render( request,'cu.html',{'cours':course})
    je ne trouve pas une solution pour convertire la liste en dictionaire et ajouter les cles , mais quand on revien a la solution la plus facile et pratique est de convertire ma requette :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select date_cours , pseudo   from users inner join course on users.idusers = course.users_idusers
    en objects models comme dans le titre
    merci

  4. #4
    Membre très actif Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Par défaut
    j'ai même modélisé mon code comme suit:
    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
    def course (request):
        course=[]
        cu=connection.cursor()
        cu.execute("select date_cours , pseudo   from users inner join course on users.idusers = course.users_idusers")
        for li  in cu :
            course.append(li)
        d={"date":[],"pseud":[]}
     
        for i in course:
     
            d["date"].append(str(i[0]))
            d["pseud"].append(i[1])
     
     
            #print(str(i[0])+ '             ' + i[1])
     
        return render( request,'cu.html',{'cours':d})

    mais au niveau du templaite ça affiche rien :
    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <title>courses</title>
     
     
    {%for c in cours%}
    <tr>
     <td>  <a href="usercourse/">{{c.date}}</a> </td><br>
     <td>  <a href="usercourse/">{{c.pseud}}</a> </td><br>
     
     
     
    </tr>
     
     
    {%endfor%}

    sauf si je mets le dictionnaire en entier :
    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <title>courses</title>
     
     
    {%for c in cours%}
    <tr>
     <td>  <a href="usercourse/">{{cours}}</a> </td><br>
     
     
     
    </tr>
     
     
    {%endfor%}

    ça m'affiche ce dictionnaire comme suit :
    {'date': ['2015-01-08', '2019-05-07', '2019-07-07', '2019-07-07'], 'pseud': ['animalx123', 'dirar', 'lacasrole', 'lalwi12']}
    {'date': ['2015-01-08', '2019-05-07', '2019-07-07', '2019-07-07'], 'pseud': ['animalx123', 'dirar', 'lacasrole', 'lalwi12']}

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Bonjour,

    Django permet d'éviter les requêtes SQL "pures", il faudra éviter cette méthode très peu recommandée pour vos projets futurs (un conseil )

    Concernant le problème, votre objet récupéré est un type dict. Votre lecture clés - valeurs doit être de la forme,

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    {% for key, values in cours.items %}
        {% for value in values %}
            {{ key }}
            {{ value }}
        {% endfor %}
    {% endfor %}

    Note: absence de parenthèse après items

    Désolé si j'ai pas bien compris l'affichage que vous devez recevoir, mais sur le principe, le problème était sur le dictionnaire et l'oubli de items.

  6. #6
    Membre très actif Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Par défaut
    merci pour la solution du dictionaire dans le tempplate , mais cette solution du sql pure etait une secode solution ,mais mon vrai probleme est de convertire cette requette en objects avec l'attribut select_related que je ne compend pas comment ca marche meme en consultant plusieur documentation

  7. #7
    Membre éclairé
    Homme Profil pro
    growth hacker
    Inscrit en
    Novembre 2018
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : growth hacker
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2018
    Messages : 187
    Par défaut
    Citation Envoyé par animalx123 Voir le message
    bonjour
    je suis nouveau sur le framwork django, je suis entraint de consevoire mon premier projet , et la je galaire grave avec les models car j'ai deux tables "users" et "course"
    et la table "course" contient une cles etrangere de la table "users" et pour afficher les courses cree par un user , j'ai essaier avec select_related mais une erreur de la page s'affiche :


    je pense que c'est moi qui s'est mal pris , voici a vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def course (request):
        courses = Course.objects.all()
        g = Users.objects.select_related('Course')
        return render( request,'cu.html',{'cours':courses,'pseud':g})
    merci d'avance pour votres aides
    Désoler, je n'ai pas vu votre post bonjour il y a sans doute un problème dans le models vous pouvez-nous le montrez

  8. #8
    Membre très actif Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Par défaut
    ma vrais problematique est que je veux convertire ma requette sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select date_cours , pseudo   from users inner join course on users.idusers = course.users_idusers"
    en un appelle object de models pour que ca soit plus souble , et en fesans des recherches j'ai trouver une piste qui est le select_rolated mais je ne sais pas comment ca marche ,et c'est la que j'ai poser la question ,l'histoire du templaite etait pour la solution prvisoire que j'ai utiliser le cursor pour la requette sql,
    pour plus de clairté voici mon models:
    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
    43
     
     
     
    class Course(models.Model):
        idcourse = models.AutoField(primary_key=True)
        date_cours = models.DateField(blank=True, null=True)
        users_idusers = models.ForeignKey('Users', models.DO_NOTHING, db_column='users_idusers')
     
        class Meta:
            managed = False
            db_table = 'course'
     
     
     
     
    class Users(models.Model):
        idusers = models.AutoField(primary_key=True)
        pseudo = models.CharField(max_length=45, blank=True, null=True)
     
        class Meta:
            managed = False
            db_table = 'users'
     
     
    class UsersCours(models.Model):
        users_idusers = models.ForeignKey(Users, models.DO_NOTHING, db_column='users_idusers', primary_key=False)
        course_idcourse = models.ForeignKey(Course, models.DO_NOTHING, db_column='course_idcourse')
     
        class Meta:
            managed = False
            db_table = 'users_cours'
            unique_together = (('users_idusers', 'course_idcourse'),)
     
     
    class UsersHasUsers(models.Model):
        users_idusers = models.ForeignKey(Users, models.DO_NOTHING, db_column='users_idusers', primary_key=False)
        users_idusers = models.ForeignKey(Users, models.DO_NOTHING, db_column='users_idusers')
        course_idcourse = models.ForeignKey(Course, models.DO_NOTHING, db_column='course_idcourse')
     
        class Meta:
            managed = False
            db_table = 'users_has_users'
            unique_together = (('users_idusers', 'users_idusers', 'course_idcourse'),)
    je vous remercie pour votres aide presieuse

  9. #9
    Membre éclairé
    Homme Profil pro
    growth hacker
    Inscrit en
    Novembre 2018
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : growth hacker
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2018
    Messages : 187
    Par défaut
    python manage.py inspectdb > models.py dans l'invite Même si je vous déconseille fortement ça provoque que des problèmes, j'ai veillé des nuits parce que j'ai importé une base.

  10. #10
    Membre très actif Avatar de animalx123
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 148
    Par défaut
    Donc ya pas moyen??,mais je cherche comment faire et les models je vais m'en occuper plutard.

  11. #11
    Membre éclairé
    Homme Profil pro
    growth hacker
    Inscrit en
    Novembre 2018
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : growth hacker
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2018
    Messages : 187
    Par défaut
    Citation Envoyé par animalx123 Voir le message
    Donc ya pas moyen??,mais je cherche comment faire et les models je vais m'en occuper plutard.
    non aucune bonne solution

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Citation Envoyé par animalx123 Voir le message
    Donc ya pas moyen??,mais je cherche comment faire et les models je vais m'en occuper plutard.
    Si il y a moyen de partir de votre BDD comme indiqué par azaazz, en générant les modèles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python manage.py inspectdb
    Vous y verrez le résultat avant de l'enregistrer dans un models.py

    Les modèles sont la première voir la deuxième (si vous vous occupez des urls.py comme plan d'action en premier) manipulation quand on commence un projet Django.

    Donc les modèles à la fin d'un projet, faut oublier, c'est totalement incohérent...

    P.S : Quand je relis vos topics, il était très difficile de comprendre votre problème, merci de l'exprimer de façon beaucoup plus claire, voir concrète si des difficultés avec la technologie Django.

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

Discussions similaires

  1. Afficher les données d'une table selon une requête
    Par chris22 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/02/2012, 19h31
  2. Réponses: 5
    Dernier message: 15/10/2008, 09h08
  3. Réponses: 7
    Dernier message: 21/09/2006, 08h44
  4. Réponses: 2
    Dernier message: 27/12/2005, 20h09
  5. afficher les chomp d'une table
    Par zidenne dans le forum Bases de données
    Réponses: 1
    Dernier message: 31/10/2005, 10h10

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