QuerySet, чтобы получить топ-х чего-либо - Django - PullRequest
1 голос
/ 29 марта 2020

здесь впервые, поэтому, пожалуйста, будьте добры (?

Я хочу, чтобы я мог показать Топ X самых комментируемых сообщений в индексе моего сайта.

#models.py

class Post(models.Model):
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    text = models.TextField()

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    author = models.ForeignKey("auth.User", on_delete=models.CASCADE)
    text = models.TextField()
#views.py

def index(request):
    top_comm = #I know it has to be Django aggregation, but I can't make it.
    return render(request, 'home/index.html', {"top_comm" : top_comm})

#index.html

{% for row in top_comm %}

{{row.author|linebreaksbr}}
{{row.text|linebreaksbr}}

{% endfor %}

1 Ответ

1 голос
/ 29 марта 2020

Возможно, меня неправильно поняли, но я думаю, что вы хотите .annotate ().

from django.db.models import Count

TOP_POST_LIMIT = 10

def index(request):
    top_comm = Post.objects.annotate(c_count=Count('comment')).order_by('-c_count')[:TOP_POST_LIMIT]
    return render(request, 'home/index.html', {"top_comm" : top_comm})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...