фильтровать объекты по количеству комментариев в Django - PullRequest
1 голос
/ 02 мая 2011

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

Я пытался сделать что-то вроде 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)

Edit:

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

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 Ответ

2 голосов
/ 02 мая 2011

Использование «аннотаций»; как то так:

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/

...