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') к набору запросов.

Дополнительная информация о order_by()

Вернуться на верх