Класс AdminSite

Класс AdminSite представляет собой центральный объект административного интерфейса Django. Он используется для регистрации моделей и настройки представлений панели администратора. По умолчанию Django создает экземпляр этого класса с именем site, который доступен через модуль django.contrib.admin. Вы можете создать собственный подкласс AdminSite, чтобы изменить внешний вид, добавить пользовательские представления или настроить поведение административной панели.

Синтаксис

pythonfrom django.contrib.admin import AdminSite

class MyAdminSite(AdminSite):
  # настройка атрибутов и методов
  pass

Для создания собственного экземпляра административного сайта необходимо наследоваться от класса AdminSite и переопределить нужные атрибуты или методы. Затем экземпляр этого класса регистрируется в URL-конфигурации проекта.

Атрибуты класса

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

Пример . Настройка заголовков

Создадим собственный административный сайт с кастомными заголовками:

pythonfrom django.contrib.admin import AdminSite

class MyAdminSite(AdminSite):
  site_header = "Панель управления"
  site_title = "Админка моего сайта"
  index_title = "Добро пожаловать в панель управления"

Методы класса

Класс AdminSite предоставляет несколько ключевых методов:

Пример . Регистрация модели

Зарегистрируем модель Article в собственном административном сайте:

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

class MyAdminSite(AdminSite):
  site_header = "Моя панель управления"

site = MyAdminSite()
site.register(Article)

Пример . Регистрация модели с ModelAdmin

Зарегистрируем модель Article с настройками ModelAdmin:

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

class ArticleAdmin(ModelAdmin):
  list_display = ("title", "status", "created_at")
  list_filter = ("status",)
  search_fields = ("title",)

class MyAdminSite(AdminSite):
  site_header = "Моя панель управления"

site = MyAdminSite()
site.register(Article, ArticleAdmin)

Пример . Использование в проекте

Для использования собственного административного сайта в проекте необходимо заменить стандартный сайт в urls.py:

pythonfrom django.contrib import admin
from django.urls import path
from myadmin import site

urlpatterns = [
  path("admin/", site.urls),
]

Пример . Переопределение метода has_permission

Переопределим метод has_permission для ограничения доступа:

pythonfrom django.contrib.admin import AdminSite

class MyAdminSite(AdminSite):
  site_header = "Моя панель управления"

  def has_permission(self, request):
    # разрешаем доступ только суперпользователям
    return request.user.is_superuser

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

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