фильтровать объекты по количеству комментариев в Django

#django #django-comments

#django #django-комментарии

Вопрос:

Как мне отфильтровать набор запросов по количеству комментариев и упорядочить по количеству комментариев по убыванию?

Я пытался сделать что-то вроде Post.objects.filter(comment_count > 0).order_by('-comment_count') , но это, конечно, не сработало.

Спасибо!

Моя модель публикации:

 class Post(models.Model):
 nickname = models.CharField(max_length=200, default=u'anonymous')
 body = models.TextField()
 pub_date = models.DateTimeField('Date Published', auto_now_add=True)
 up_date = models.DateTimeField('Date Updated', auto_now=True)
 category = models.ForeignKey(Category, related_name='post_category')
 counter = models.IntegerField(default=0)
 status = models.IntegerField(choices=POST_STATUS, default=0)
 votes = models.IntegerField('Votes', default=0)
  

Редактировать:

Только что добавлен следующий код

 from django.contrib.contenttypes import generic
from django.contrib.comments.models import Comment

comments = generic.GenericRelation(Comment, object_id_field="object_pk")
  

И, на мой взгляд:

 post_list = Post.objects.annotate(comment_count=Count('comments')).filter(status=STATUS.ACCEPTED).filter(comment_count__gt=0).order_by('-comment_count')
  

Я исправил свою модель и код представления. Теперь они работают нормально.

Спасибо!

Ответ №1:

Используя «аннотации»; что-то вроде этого:

 from django.db.models import Count
Post.objects.annotate(comment_count=Count('comments')).filter(comment_count__gt=0).order_by('-comment_count')
  

Смотрите следующее для получения дополнительной информации:
http://docs.djangoproject.com/en/dev/topics/db/aggregation /

Комментарии:

1. Спасибо за ваш ответ. Как этот код узнает, что такое 'comments' ? В моей модели Post нет никаких ссылок на комментарии. Должен ли я сначала добавлять эту ссылку в свою модель Post?

2. Если у вас есть ссылка на вашу модель комментариев, например comment_set , используйте это. Поскольку вы не опубликовали свои модели, я просто предполагал.

3. Я включил код моей модели Post. Я использую встроенную модель комментариев Django, и у меня нет никаких ссылок на нее. Я просто следую их руководству . Ранее я реализовал Disqus, но теперь собираюсь использовать комментарии Django вместо этого. Итак, я впервые прикасаюсь к этому. Итак, как бы мне сделать ссылку на модель комментариев из моей модели Post? Большое спасибо!