Ответ 1
Вы можете передать свой запрос на reversed:
last_ten = Messages.objects.filter(since=since).order_by('-id')[:10]
last_ten_in_ascending_order = reversed(last_ten)
Предположим, что я реализую поток сообщений, записывает сортировку по ID по возрастанию, каждый запрос на выборку, я хочу разрешить только получение самых последних 10 записей.
Я пробовал:
Messages.objects.filter(since=since)[:-10]
И у меня была ошибка: отрицательная индексация не поддерживается.
Моя текущая работа - это сортировка по порядку сортировки, а затем запуск:
Messages.objects.filter(since=since)[:10]
Но это требует, чтобы передняя часть снова меняла порядок.
Мой вопрос в том, есть ли элегантный способ сделать это?
Вы можете передать свой запрос на reversed:
last_ten = Messages.objects.filter(since=since).order_by('-id')[:10]
last_ten_in_ascending_order = reversed(last_ten)
Или используйте [::-1]
вместо reversed
:
last_ten = Messages.objects.filter(since=since).order_by('-id')[:10][::-1]
Если вы хотите, чтобы последние X-записи отсортировались в порядке убывания id, тогда я не думаю, что вам нужно, так как фильтр
last_ten = Messages.objects.all().order_by('-id')[:10]
Использование -id будет сортироваться в порядке убывания. Надеюсь, это было полезно!