РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
66 of 818 menu

Метод order_by

Метод order_by применяется к QuerySet и возвращает новый QuerySet, отсортированный по указанным полям. По умолчанию сортировка выполняется по возрастанию (ASC). Для сортировки по убыванию нужно добавить знак минуса перед именем поля. Метод можно вызывать цепочкой с другими методами фильтрации.

Синтаксис

Model.objects.order_by(*fields)

Параметры метода:

  • fields - имена полей модели, по которым выполняется сортировка. Можно передать одно или несколько полей. Для сортировки по убыванию используется префикс '-'.

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

Давайте отсортируем статьи по дате создания по возрастанию:

from myapp.models import Article articles = Article.objects.order_by('created_at') for article in articles: print(article.title, article.created_at)

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

"First article" 2025-01-01 10:00:00 "Second article" 2025-01-02 12:00:00 "Third article" 2025-01-03 15:00:00

Пример . Сортировка по убыванию

Теперь отсортируем статьи по дате создания по убыванию:

from myapp.models import Article articles = Article.objects.order_by('-created_at') for article in articles: print(article.title, article.created_at)

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

"Third article" 2025-01-03 15:00:00 "Second article" 2025-01-02 12:00:00 "First article" 2025-01-01 10:00:00

Сортировка по нескольким полям

Отсортируем статьи сначала по статусу публикации, а затем по дате создания:

from myapp.models import Article articles = Article.objects.order_by('status', '-created_at') for article in articles: print(article.title, article.status, article.created_at)

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

"Draft article" draft 2025-01-03 15:00:00 "Second article" published 2025-01-02 12:00:00 "First article" published 2025-01-01 10:00:00

Сортировка с фильтрацией

Давайте отфильтруем опубликованные статьи и отсортируем их по названию:

from myapp.models import Article articles = Article.objects.filter(status='published').order_by('title') for article in articles: print(article.title)

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

"Article about Django" "Article about Python" "Article about SQL"

Сортировка по полям связанной модели

Отсортируем статьи по названию категории через связь:

from myapp.models import Article articles = Article.objects.select_related('category').order_by('category__name') for article in articles: print(article.title, article.category.name)

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

"Python article" Backend "Java article" Backend "CSS article" Frontend "HTML article" Frontend

Сортировка с использованием значений

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

from myapp.models import Article res = Article.objects.order_by('-views').values('title', 'views') for item in res: print(item)

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

{"title": "Popular article", "views": 1000} {"title": "Medium article", "views": 500} {"title": "New article", "views": 100}

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

  • метод filter,
    который фильтрует записи в QuerySet
  • метод exclude,
    который исключает записи из QuerySet
  • метод values,
    который возвращает QuerySet словарей
  • атрибут ordering в Meta классе модели,
    который задает сортировку по умолчанию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить