#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')
в набор запросов.
Комментарии:
1. привет, Ник, спасибо за твой ответ, но я думаю, что не смог бы ясно объяснить, чего я хочу. Представьте, что вы являетесь пользователем и у вас есть список элементов, и вы хотите, чтобы 3-й элемент в списке был первым элементом в возвращенном списке. таким образом, вы сделаете запрос на сервер с {item_id: 3, порядковый номер: 1}, поэтому я должен сделать так, чтобы элемент 3 был первым в возвращаемом списке в следующих запросах.
2. затем использую
.order_by('order_number')
.3. @AhmedSamy Я не думаю, что понимаю, о чем вы спрашиваете. Ваше продолжение, по-видимому, противоречит приведенному исходному примеру. Я бы предложил предоставить более подробную информацию в этом примере или предоставить некоторый рабочий код, чтобы другие могли понять, что вы пытаетесь сделать.