Django: Показать сообщения с максимальным количеством голосов - PullRequest
0 голосов
/ 14 апреля 2020

Я работаю над проектом, и я новичок в Django. В проекте пользователь может создавать сообщения о продуктах, а другие пользователи могут голосовать за него. На главной странице я хочу показывать сообщения с максимальным количеством голосов. Я использую Postgresql в качестве бэкэнда.

это функция просмотра для домашней страницы, которая возвращает словарь продуктов:

def home(request):
products = Product.objects
return render(request, 'products/home.html', {'products': products})

, так как я новичок, я не понимаю как это сделать в Django шаблонах.

Ответы [ 3 ]

0 голосов
/ 14 апреля 2020

Я хочу показать сообщения с максимальным количеством голосов

Предполагая, что Product модель имеет поле votes типа IntegerField, вы можете использовать что-то следующее:

from django.db.models import Max

max_votes = Product.objects.all().aggregate(Max('votes'))
products = Product.objects.filter(votes=max_votes)

Если идея состоит в том, чтобы показать top n upvoted Product s, тогда используйте следующий запрос

products = Product.objects.all().order_by('-votes')[:n]

Отрицательный знак перед "-votes" в вышеприведенном запросе указывает в порядке убывания.

0 голосов
/ 14 апреля 2020
def home(request):
    products = Product.objects.order_by('votes') 
    return render(request, 'products/home.html', {'products': products})
0 голосов
/ 14 апреля 2020

Вы можете использовать orderby метод, предоставленный в django ORM.

products = Product.objects.order_by('fieldname')   #This is ascending

Для Dscending вы ставите - перед именем поля. Что даст вам максимальные результаты сначала для этого поля.

products = Product.objects.order_by('-fieldname')   #This is ascending
...