Django установил рекорд в пользовательском порядке

#python #django

Вопрос:

как установить пользовательский порядок записи в наборе запросов? пример: Набор запросов имеет следующие значения

 <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}]>
 

Я мог бы перебирать все элементы набора запросов и каждый раз устанавливать порядок, но я спрашиваю, есть ли какое-либо лучшее решение.

Ответ №1:

Вы можете использовать order_by() . Это сортирует ответ в базе данных перед отправкой его в Django и, как правило, быстрее, чем написание собственного кода сортировки.

Пример:

 Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
 

Это сортируется pub_date в порядке убывания (это то, что - делает), затем, если есть связь, она сортируется в алфавитном порядке по заголовку.

В вашем примере я бы добавил .order_by('order_number') в набор запросов.

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

Комментарии:

1. привет, Ник, спасибо за твой ответ, но я думаю, что не смог бы ясно объяснить, чего я хочу. Представьте, что вы являетесь пользователем и у вас есть список элементов, и вы хотите, чтобы 3-й элемент в списке был первым элементом в возвращенном списке. таким образом, вы сделаете запрос на сервер с {item_id: 3, порядковый номер: 1}, поэтому я должен сделать так, чтобы элемент 3 был первым в возвращаемом списке в следующих запросах.

2. затем использую .order_by('order_number') .

3. @AhmedSamy Я не думаю, что понимаю, о чем вы спрашиваете. Ваше продолжение, по-видимому, противоречит приведенному исходному примеру. Я бы предложил предоставить более подробную информацию в этом примере или предоставить некоторый рабочий код, чтобы другие могли понять, что вы пытаетесь сделать.