Декоратор admin.register

Декоратор admin.register применяется к классу ModelAdmin и позволяет зарегистрировать модель в административной панели Django. В качестве аргумента декоратор принимает модель или список моделей, которые нужно зарегистрировать. Декоратор автоматически связывает модель с настройками отображения, которые определены в классе ModelAdmin.

Синтаксис

python@admin.register(model)
class ModelAdmin(admin.ModelAdmin):
  pass

Пример

Давайте зарегистрируем модель 'Article' в административной панели с базовыми настройками:

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

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
  list_display = ('id', 'title', 'status', 'created_at')
  list_filter = ('status', 'created_at')
  search_fields = ('title', 'content')

В этом примере модель 'Article' регистрируется с кастомным классом настроек 'ArticleAdmin'. В результате в админке будут отображаться колонки с полями 'id', 'title', 'status' и 'created_at', появится фильтр по этим полям и поиск по заголовку и содержимому статей.

Пример

Декоратор может принимать несколько моделей для регистрации с одинаковыми настройками:

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

@admin.register(Article, Category, Tag)
class BaseAdmin(admin.ModelAdmin):
  list_display = ('id', 'name', 'created_at')
  list_filter = ('created_at',)
  ordering = ('-created_at',)

Все три модели получат одинаковые настройки отображения. Это удобно, когда для нескольких моделей нужны идентичные параметры администрирования.

Пример

Можно также зарегистрировать модель с кастомными методами в классе ModelAdmin:

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

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
  list_display = ('id', 'title', 'status', 'short_content')
  list_filter = ('status',)
  search_fields = ('title',)
  
  def short_content(self, obj):
    return obj.content[:50] + '...' if obj.content else ''
  short_content.short_description = 'Краткое содержание'

В этом примере добавлен кастомный метод short_content, который отображает обрезанное содержание статьи в списке. Свойство short_description задает заголовок колонки.

Пример

Декоратор также позволяет использовать классы вложенных таблиц для связанных моделей:

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

class CommentInline(admin.TabularInline):
  model = Comment
  extra = 1

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
  list_display = ('title', 'status', 'created_at')
  inlines = [CommentInline]

Теперь при редактировании статьи в админке будут отображаться связанные комментарии в виде таблицы. Это позволяет удобно управлять связанными данными в одном интерфейсе.

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

  • класс ModelAdmin,
    который настраивает отображение модели в админке
  • класс AdminSite,
    который управляет всей административной панелью
  • метод register,
    который регистрирует модель без использования декоратора
  • класс unregister,
    который отменяет регистрацию модели