Метод register
Метод register класса AdminSite применяется
для регистрации моделей в административной панели Django.
Он связывает модель с классом ModelAdmin или
использует стандартную конфигурацию, если класс не указан.
Метод принимает модель и опциональный класс административного
интерфейса. После регистрации модель становится доступной
для управления через административную панель.
Синтаксис
admin_site.register(model, admin_class=None)
Параметры
Метод register принимает два параметра:
- model - обязательный параметр, модель которую необходимо зарегистрировать в административной панели
-
admin_class - опциональный параметр,
класс
ModelAdminс настройками отображения и управления моделью
Пример
Давайте зарегистрируем модель Article в
административной панели с использованием стандартного
класса AdminSite:
from django.contrib import admin
from myapp.models import Article
# Создание экземпляра административного сайта
admin_site = admin.AdminSite(name='myadmin')
# Регистрация модели со стандартным интерфейсом
admin_site.register(Article)
После выполнения кода модель Article появится
в административной панели с базовым интерфейсом
управления.
Пример
Давайте зарегистрируем модель Article с
кастомным классом ModelAdmin, который
задает отображение полей:
from django.contrib import admin
from myapp.models import Article
# Создание кастомного класса ModelAdmin
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'status', 'created_at')
list_filter = ('status',)
search_fields = ('title', 'content')
# Создание экземпляра административного сайта
admin_site = admin.AdminSite(name='myadmin')
# Регистрация модели с кастомным интерфейсом
admin_site.register(Article, ArticleAdmin)
Результат выполнения кода:
"Model Article registered with custom admin interface"
Пример
Давайте зарегистрируем несколько моделей в одном
экземпляре AdminSite с различными
конфигурациями:
from django.contrib import admin
from myapp.models import Article, Category, User
# Создание кастомных классов ModelAdmin
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'category', 'status')
list_filter = ('category', 'status')
search_fields = ('title',)
class CategoryAdmin(admin.ModelAdmin):
list_display = ('name', 'slug')
prepopulated_fields = {'slug': ('name',)}
# Создание экземпляра административного сайта
admin_site = admin.AdminSite(name='myadmin')
# Регистрация моделей с кастомными интерфейсами
admin_site.register(Article, ArticleAdmin)
admin_site.register(Category, CategoryAdmin)
admin_site.register(User)
После выполнения кода все три модели будут
зарегистрированы в административной панели, при
этом модели Article и Category
будут использовать кастомные интерфейсы, а модель
User - стандартный.
Пример
Давайте создадим собственный подкласс AdminSite
и зарегистрируем модель внутри его метода
__init__:
from django.contrib import admin
from myapp.models import Article
# Создание собственного подкласса AdminSite
class CustomAdminSite(admin.AdminSite):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Автоматическая регистрация моделей
self.register(Article)
# Создание экземпляра кастомного административного сайта
custom_admin_site = CustomAdminSite(name='customadmin')
Результат выполнения кода:
"Custom admin site created with Article model registered"
Особенности использования
При использовании метода register важно
учитывать следующие моменты:
-
Если попытаться зарегистрировать одну и ту же
модель дважды, будет вызвано исключение
AlreadyRegistered - Метод может принимать как одну модель, так и итерируемый объект моделей
-
При регистрации без указания класса
ModelAdminиспользуется стандартная конфигурация -
Для отмены регистрации модели используется
метод
unregister
Смотрите также
-
метод
unregister,
который отменяет регистрацию модели -
декоратор
admin.register,
который упрощает регистрацию моделей -
класс
AdminSite,
который представляет административный сайт Django -
класс
ModelAdmin,
который определяет интерфейс управления моделью