Атрибут ordering

Атрибут ordering применяется к классу ModelAdmin и определяет порядок сортировки записей при их отображении в списке административной панели. Этот атрибут принимает список или кортеж строк, где каждая строка - это имя поля модели, по которому выполняется сортировка.

Синтаксис

pythonfrom django.contrib import admin
from myapp.models import Article

class ArticleAdmin(admin.ModelAdmin):
  ordering = ['-created_at']

Пример

Давайте настроим сортировку статей по дате создания в порядке убывания:

pythonfrom django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
  list_display = ['title', 'created_at', 'status']
  ordering = ['-created_at']  # Сортировка по убыванию даты

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

python"Статьи отображаются в админке: сначала новые, потом старые"

Пример

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

pythonfrom django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
  list_display = ['title', 'status', 'created_at']
  ordering = ['status', '-created_at']  # Сначала по статусу, затем по дате

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

python"Сначала статьи со статусом 'draft', затем 'published', внутри каждой группы по дате убывания"

Пример

Использование атрибута с моделями, связанными через внешний ключ:

pythonfrom django.contrib import admin
from .models import Article, Category

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
  list_display = ['title', 'category', 'created_at']
  ordering = ['category__name', '-created_at']  # Сортировка по имени категории

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

python"Статьи сортируются по имени категории (от A до Z), затем по дате создания"

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

  • атрибут list_display,
    который определяет поля для отображения в списке
  • атрибут list_filter,
    который добавляет фильтры в боковую панель
  • атрибут search_fields,
    который добавляет поиск по полям модели
  • атрибут list_per_page,
    который задаёт количество записей на страницу