#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? Большое спасибо!