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 :

ManyToManyDescriptor object has no attribute 'filter'


Sujet :

Django Python

  1. #1
    Membre régulier 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
    Points : 96
    Points
    96
    Par défaut ManyToManyDescriptor object has no attribute 'filter'
    Bonjour ,
    je debute sur django et je coince avec l'erreur:

    'ManyToManyDescriptor' object has no attribute 'filter'
    et voici ma vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def use_course(request,id):
     
        cours_id = Course.objects.get(id=id)
        users_participe = Course.participents.filter(Course_id=course_id)
     
        return render( request,'uc.html',{})
    et mon models:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Users(models.Model):
        pseudo = models.CharField(max_length=45, blank=True, null=True)
     
     
    class Course(models.Model):
     
        date_cours = models.DateField(blank=True, null=True)
        user_create = models.ForeignKey('Users', on_delete=models.CASCADE)
        participents = models.ManyToManyField('Users',related_name='participents',blank=True)
    j'ai bien chercher sur le net comment reglé l'erreur mais rien qui resolue mon probleme,et pourtant dans toutes les documentation et cours django disent que pour acceder a la nouvelle table du manytomany ce fait ainci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Course.participents.filter(Course_id=course_id)
    remarque:
    meme le add et le all et order me sortent la meme erreur


    merci d'avance pour vos reponses

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par animalx123 Voir le message
    j'ai bien chercher sur le net comment reglé l'erreur mais rien qui resolue mon probleme,et pourtant dans toutes les documentation et cours django disent que pour acceder a la nouvelle table du manytomany ce fait ainci
    L'erreur vous dit juste que Course.participents est un "ManyToManyDescriptor" et non un query-set auquel on pourrait appliquer ces méthodes là.
    Et si vous regardez les exemples du tuto. Django en prenant le temps de comprendre les différences... vous devriez y arrivez.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier 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
    Points : 96
    Points
    96
    Par défaut
    j'ai pas pus resoudre le probleme ,mais j'ai trouver une autre solution qui est de cree une nouvelle class associer a manytomany avec le parametre through, voici mon nouveau 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
     
    class Users(models.Model):
        pseudo = models.CharField(max_length=45, blank=True, null=True)
     
     
    class Course(models.Model):
     
        date_cours = models.DateField(blank=True, null=True)
        user_create = models.ForeignKey('Users', on_delete=models.CASCADE)
        participent = models.ManyToManyField('Users',related_name='+', through='participents' ,blank=True)
     
     
     
    class participents(models.Model):
     
     
        users_id = models.ForeignKey(Users, on_delete=models.CASCADE)
        course_id = models.ForeignKey(Course, on_delete=models.CASCADE)
    et ma nouvelle vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def use_course(request,id):
     
     
        cours_id = Course.objects.get(id=id)
        participe= participents.objects.filter(course_id=id)
        users_participe=[]
        for i in participe:
            b=i.users_id
            c=(b.id,b.pseudo)
            users_participe.append(c)
     
     
        return render( request,'uc.html',{'users_participe':users_participe})
    mais je trouve que c'est assée long et pas propre comme code,et le principe des ORM est de minimiser le code et les requettes au maximum,
    pouvez vous m'aider a faire cette requette avec objects.filter sur la classe participents car j'ai essayer mais ca foire a chaque fois.

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Bonsoir,

    Si on cherche à avoir tous les participants d'une course, il faut faire sa requête de la manière suivante,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    users = User.objects.filter(course_id=...)
    EDIT:

    Si je devais suivre ta logique, je récupère la course selon l'id, puis pour avoir tous les utilisateurs de la course,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    users = course.participents.all()
    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)

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

Discussions similaires

  1. 'module' object has no attribute 'maketrans'
    Par julien.63 dans le forum Général Python
    Réponses: 3
    Dernier message: 16/05/2009, 20h48
  2. Ftp : 'str' object has no attribute 'read'
    Par noquioz dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 02/01/2009, 15h46
  3. x object has no attribute y (PyQ4t et QLineEdit)
    Par EricStib dans le forum PyQt
    Réponses: 9
    Dernier message: 23/10/2008, 23h00
  4. Probleme : AttributeError: 'tuple' object has no attribute
    Par MrGecko dans le forum Général Python
    Réponses: 1
    Dernier message: 27/05/2007, 09h59
  5. Réponses: 2
    Dernier message: 26/05/2006, 14h48

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