Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

filtrer avec Contenttype, GenericForeignKey, GenericRelation

0 votes

J'aimerais classer les articles d'un blog en fonction du nombre de commentaire qu'ils ont obtenu.
J'ai séparé les modèles Post et Comment dans deux applications.

posts/models.py

from django.contrib.contenttypes.fields import GenericRelation
from comment.models import Comment

class Post(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
    title  = models.CharField(max_length=120)
    slug = models.SlugField(unique=True)
    content  = models.TextField(default='')
    comment = GenericRelation(Comment)
    ....

comments/models.py

class Comment(models.Model):     
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object  = GenericForeignKey('content_type', 'object_id')
    content = models.TextField()
    ....

posts/views.py

def post_list(request):
    list_pop = Post.objects.annotate(num_com=Count('comment')).order_by('-num_com')[:5]
    ...

Je ne parviens pas avoir une liste [(post,nb_comment),...]. Je pense que cette synthaxe (dans la vue) marche lorsqu'on définit une ForeignKey dediée mais pas une GenericForeignKey.

Quelqu'un aurait une idée ?

demandé 12-Jul-2017 par Sylvain

1 Réponse

0 votes

ca serait pas mieux avec une FK ?

from post.models import Post
class Comment(models.Model):     
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
    posts = models.ForeignKey(Post)

et pour avoir sa liste de posts et nb commentaires ; jouer avec https://docs.djangoproject.com/fr/1.11/ref/models/expressions/ ?

répondu 13-Aou-2017 par foxmask (2,892 points)
...