Подтвердить что ты не робот

Django запрос получить последние n записей

Предположим, что я реализую поток сообщений, записывает сортировку по ID по возрастанию, каждый запрос на выборку, я хочу разрешить только получение самых последних 10 записей.

Я пробовал:

Messages.objects.filter(since=since)[:-10]

И у меня была ошибка: отрицательная индексация не поддерживается.

Моя текущая работа - это сортировка по порядку сортировки, а затем запуск:

Messages.objects.filter(since=since)[:10]

Но это требует, чтобы передняя часть снова меняла порядок.

Мой вопрос в том, есть ли элегантный способ сделать это?

4b9b3361

Ответ 1

Вы можете передать свой запрос на reversed:

last_ten = Messages.objects.filter(since=since).order_by('-id')[:10]
last_ten_in_ascending_order = reversed(last_ten)

Ответ 2

Или используйте [::-1] вместо reversed:

last_ten = Messages.objects.filter(since=since).order_by('-id')[:10][::-1]

Ответ 3

Если вы хотите, чтобы последние X-записи отсортировались в порядке убывания id, тогда я не думаю, что вам нужно, так как фильтр

last_ten = Messages.objects.all().order_by('-id')[:10]

Использование -id будет сортироваться в порядке убывания. Надеюсь, это было полезно!