Метод reverse

Метод reverse применяется к QuerySet и возвращает новый QuerySet с записями, упорядоченными в обратном порядке относительно текущей сортировки. Если в запросе не задана сортировка через order_by, то метод работает в сочетании с сортировкой по умолчанию, заданной в Meta классе модели. Метод полезен для инвертирования порядка вывода записей без необходимости переопределения сортировки.

Метод принимает один необязательный параметр:

Синтаксис

pythonModel.objects.order_by('field').reverse()
Model.objects.all().reverse()

Пример . С сортировкой по умолчанию

Рассмотрим модель Article с сортировкой по полю 'created_at' в Meta классе:

pythonfrom django.db import models

class Article(models.Model):
  title = models.CharField(max_length=200)
  created_at = models.DateTimeField(auto_now_add=True)

  class Meta:
    ordering = ['-created_at']

Получим первые 5 статей в обратном порядке:

pythonfrom myapp.models import Article

res = Article.objects.all().reverse()[:5]

for article in res:
  print(article.title)

Результат выполнения кода:

python"article 1"
"article 2"
"article 3"
"article 4"
"article 5"

Пример . С явной сортировкой

Реверсируем статьи, отсортированные по полю 'title':

pythonfrom myapp.models import Article

articles = Article.objects.order_by('title')
reversed_articles = articles.reverse()

for article in reversed_articles[:3]:
  print(article.title)

Результат выполнения кода:

python"article z"
"article y"
"article x"

Пример . С комбинированной сортировкой

Реверсируем статьи, отсортированные по нескольким полям:

pythonfrom myapp.models import Article

res = Article.objects.order_by('status', '-created_at').reverse()

for article in res[:5]:
  print(f"{article.title} - {article.status}")

Результат выполнения кода:

python"article 4 - draft"
"article 3 - draft"
"article 2 - published"
"article 1 - published"
"article 5 - archived"

Смотрите также

  • метод order_by,
    который задаёт сортировку QuerySet
  • метод values,
    который возвращает QuerySet словарей
  • метод values_list,
    который возвращает QuerySet кортежей
  • метод only,
    который выбирает только указанные поля