Django устанавливает запись в пользовательском порядке
как установить пользовательский порядок записей в queryset? например: Queryset имеет следующие значения
<QuerySet [{'id': 5, 'order_number': 1}, {'id': 3, 'order_number': 2}, {'id': 2, 'order_number': 3}, {'id': 1, 'order_number': 4}, {'id': 7, 'order_number': 5}, {'id': 4, 'order_number': 6}]>
запрос установил порядок элемента id=5
как 3-ю запись набора запросов
поэтому набор запросов должен быть следующим:
<QuerySet [{'id': 3, 'order_number': 1}, {'id': 2, 'order_number': 2}, {'id': 5, 'order_number': 3}, {'id': 1, 'order_number': 4}, {'id': 7, 'order_number': 5}, {'id': 4, 'order_number': 6}]>
Я мог бы перебирать все элементы queryset и устанавливать порядок каждый раз, но я спрашиваю, есть ли лучшее решение.
Вы можете использовать order_by()
. Это сортирует ответ в базе данных перед отправкой его в Django, и обычно это быстрее, чем писать свой собственный код сортировки.
Пример:
Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
Это сортирует по pub_date
в порядке убывания (это то, что делает -
), затем, если есть ничья, сортирует в алфавитном порядке по заголовку.
В вашем примере я бы добавил .order_by('order_number')
к набору запросов.