Bienvenue sur IndexError.

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

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

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 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 par foxmask (2,664 points)
...