Класс ModelAdmin

Класс ModelAdmin применяется для настройки административного интерфейса для конкретной модели. Он позволяет определить, как модель будет отображаться в списке объектов, какие поля будут доступны для редактирования, как будет выглядеть форма добавления и изменения, а также настроить фильтрацию, поиск и дополнительные действия. Класс наследуется от django.contrib.admin.ModelAdmin и регистрируется в административном сайте с помощью метода register.

Синтаксис

pythonfrom django.contrib import admin
from .models import MyModel

class MyModelAdmin(admin.ModelAdmin):
  # Настройки админки
  list_display = ('field1', 'field2')
  list_filter = ('field1',)
  search_fields = ('field2',)

admin.site.register(MyModel, MyModelAdmin)

Пример

Настроим отображение модели Article в административном интерфейсе. Определим какие поля будут отображаться в списке статей, добавим фильтрацию по статусу и поиск по заголовку:

pythonfrom django.contrib import admin
from .models import Article

class ArticleAdmin(admin.ModelAdmin):
  list_display = ('title', 'status', 'created_at')
  list_filter = ('status',)
  search_fields = ('title',)

admin.site.register(Article, ArticleAdmin)

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

python"Административный интерфейс для Article настроен"

Пример

Используем атрибут list_editable для того, чтобы разрешить редактирование некоторых полей прямо из списка объектов. Также настроим количество записей на странице с помощью list_per_page:

pythonfrom django.contrib import admin
from .models import Article

class ArticleAdmin(admin.ModelAdmin):
  list_display = ('title', 'status', 'views')
  list_editable = ('status', 'views')
  list_per_page = 25

admin.site.register(Article, ArticleAdmin)

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

python"Теперь статус и количество просмотров можно редактировать прямо из списка"

Пример

Используем атрибут fieldsets для группировки полей в форме редактирования. Разделим поля на основные и дополнительные:

pythonfrom django.contrib import admin
from .models import Article

class ArticleAdmin(admin.ModelAdmin):
  fieldsets = (
    ('Основные данные', {
      'fields': ('title', 'content', 'status')
    }),
    ('Дополнительно', {
      'fields': ('views', 'created_at'),
      'classes': ('collapse',)
    }),
  )

admin.site.register(Article, ArticleAdmin)

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

python"Форма редактирования разделена на две группы полей"

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

  • атрибут list_display,
    который определяет поля, отображаемые в списке объектов
  • атрибут list_filter,
    который добавляет фильтры в боковую панель
  • атрибут search_fields,
    который настраивает поля для поиска
  • декоратор admin.register,
    который используется для регистрации модели с настройками