Декоратор admin.register
Декоратор admin.register применяется к классу ModelAdmin
и позволяет зарегистрировать модель в административной панели
Django. В качестве аргумента декоратор принимает модель
или список моделей, которые нужно зарегистрировать.
Декоратор автоматически связывает модель с настройками
отображения, которые определены в классе ModelAdmin.
Синтаксис
@admin.register(model)
class ModelAdmin(admin.ModelAdmin):
pass
Пример
Давайте зарегистрируем модель 'Article' в административной панели
с базовыми настройками:
from 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', появится фильтр
по этим полям и поиск по заголовку и содержимому статей.
Пример
Декоратор может принимать несколько моделей для регистрации с одинаковыми настройками:
from 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:
from 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 задает заголовок колонки.
Пример
Декоратор также позволяет использовать классы вложенных таблиц для связанных моделей:
from 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,
который отменяет регистрацию модели