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 :

Liaison de table avec foreignKey


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 21
    Par défaut Liaison de table avec foreignKey
    Bonjour à tous,

    J'ai un petit problème avec les liaisons de tables sous django. J'ai suivi à la lettre le tuto sur djangobook, mais je me retrouve toujours avec la meme erreur.
    Le code de model :

    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
    from django.db import models
     
    class Article (models.Model):
        title=models.CharField(max_length=100)
        content=models.TextField()
        keywords=models.CharField(max_length=300)
        category_article=models.ForeignKey('Category_article',null=True)
        insert_dt=models.DateField()
        picture = models.CharField(max_length=100,null=True)
     
        def __unicode__(self):
            return self.title
     
     
    class Comment (models.Model):
        article = models.ForeignKey(Article)
        content =models.TextField()
        name=models.CharField(max_length =100)
        rate= models.IntegerField()
        insert_dt=models.DateField()
        url =models.URLField()
        email=models.EmailField()
     
        def __unicode__(self):
            return self.name
     
    class Category_article(models.Model):
        name=models.CharField(max_length=100)
        insert_dt=models.DateField()
        details=models.TextField()
     
        def __unicode__(self):
            return self.name
    Dans la vue, J'utilise simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #blog page (display the first 20 articles)
    def blog(request):
    	articles= Article.objects.all().order_by("-insert_dt")[:20]
    	articles.comment_set.all()
    	return render_to_response('portfolio/blog/index.html',{'articles':articles})
    L'erreur s'affichant étant :
    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
    AttributeError at /blog/
    'QuerySet' object has no attribute 'comment_set'
    Request Method:	GET
    Request URL:	http://127.0.0.1:8000/blog/
    Django Version:	1.2.3
    Exception Type:	AttributeError
    Exception Value:	
    'QuerySet' object has no attribute 'comment_set'
    Exception Location:	/home/johann/mysite/../mysite/portfolio/views.py in blog, line 20
    Python Executable:	/usr/bin/python
    Python Version:	2.6.5
    Python Path:	['/home/johann/mysite', '/usr/local/lib/python2.6/dist-packages/setuptools-0.6c11-py2.6.egg', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/local/lib/python2.6/dist-packages']
    Server time:	Sat, 9 Oct 2010 18:50:36 -0500
    Traceback Switch to copy-and-paste view
     
    /usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py in get_response
                        response = callback(request, *callback_args, **callback_kwargs) ...
    ▶ Local vars
    /home/johann/mysite/../mysite/portfolio/views.py in blog
    	articles.comment_set.all() ...
    ▶ Local vars
    Si J'enlève la ligne dans la vue - articles.comment_set.all() - L affichage fonctionne (pour les données de la table articles seulement bien sur).

    Merci de votre aide et bon dimanche à tous !

  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Bonjour,

    Que veux-tu obtenir avec ton comment_set?

  3. #3
    Membre averti
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 21
    Par défaut
    Bonjour pacificator,

    Je souhaiterais obtenir tous les commentaires ( table comment) liés à l'article.
    Vois tu l'origine du problème ?

    Merci

  4. #4
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Citation Envoyé par boulet_sensei Voir le message
    Je souhaiterais obtenir tous les commentaires ( table comment) liés à l'article.
    sauf que articles n'est pas un objet Article mais un queryset..
    le plus simple c'est d' ajouter un related_name:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class Comment (models.Model):
        article = models.ForeignKey(Article, related_name="comments")
    dans ton template, il te suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {% for article in articles %}
        {{ article.title }}
        ....
        {% for comment in article.comments %}
            {{ comment }} 
        {% endfor %}
    {% endfor %}

  5. #5
    Membre averti
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 21
    Par défaut
    Merci.
    J'ai fait comme tu as dis, à savoir ajouter le related name, et je me retrouve du coup avec un autre message que je n'arrive pas non plus à déchiffrer...

    Désolé d'être si em..bétant, mais n'aurais tu pas une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    TemplateSyntaxError at /blog/
    Caught TypeError while rendering: 'RelatedManager' object is not iterable
    Request Method:	GET
    Request URL:	http://127.0.0.1:8000/blog/
    Django Version:	1.2.3
    Exception Type:	TemplateSyntaxError
    Exception Value:	
    Caught TypeError while rendering: 'RelatedManager' object is not iterable
    Exception Location:	/usr/local/lib/python2.6/dist-packages/django/template/defaulttags.py in render, line 137
    Python Executable:	/usr/bin/python
    Python Version:	2.6.5
    Python Path:	['/home/johann/mysite', '/usr/local/lib/python2.6/dist-packages/setuptools-0.6c11-py2.6.egg', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/local/lib/python2.6/dist-packages']
    Server time:	Sun, 10 Oct 2010 05:11:14 -0500

  6. #6
    Membre averti
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 21
    Par défaut
    pour info, j'ai pris le code ici:

    http://www.djangobook.com/en/2.0/chapter10/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> p = Publisher.objects.get(name='Apress Publishing')
    >>> p.book_set.all()
    [<Book: The Django Book>, <Book: Dive Into Python>, ...]

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

Discussions similaires

  1. [AC-2003] Liaison des tables avec SQL Server
    Par Marc_27 dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/10/2011, 14h33
  2. initialiser tables avec foreignkey
    Par greg08 dans le forum Débuter
    Réponses: 1
    Dernier message: 23/11/2009, 15h58
  3. Editer liaison entre table avec Formulaire
    Par Thaumas dans le forum Access
    Réponses: 1
    Dernier message: 24/03/2009, 23h27
  4. Liaison entre tables avec jointure
    Par Janitrix dans le forum Zend_Db
    Réponses: 2
    Dernier message: 08/09/2007, 12h12
  5. Liaison de table avec une autre base de donnée
    Par freya91 dans le forum Access
    Réponses: 1
    Dernier message: 03/06/2006, 00h08

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