Метод unregister
Метод unregister применяется к экземпляру класса
AdminSite и удаляет указанную модель (или список
моделей) из интерфейса администратора. Это позволяет
динамически управлять доступными моделями в админке,
скрывая те из них, которые не должны отображаться в
данный момент. Метод полезен при переопределении
стандартного сайта администратора или при создании
пользовательских административных интерфейсов с
различными наборами моделей.
Синтаксис
admin_site.unregister(model)
Где admin_site - экземпляр класса AdminSite,
а model - модель или список моделей, которые нужно
удалить из регистрации. Если модель не была зарегистрирована
ранее, метод вызовет исключение NotRegistered.
Пример
Давайте рассмотрим базовый пример использования метода
unregister для удаления модели из стандартного
сайта администратора:
from django.contrib import admin
from myapp.models import Article, Category
# Регистрируем модели
admin.site.register(Article)
admin.site.register(Category)
# Удаляем модель Article из админки
admin.site.unregister(Article)
Результат выполнения кода:
"Model Article was successfully unregistered from admin site"
Пример
Теперь рассмотрим, как удалить несколько моделей одновременно, передав список:
from django.contrib import admin
from myapp.models import Article, Category, UserProfile
# Регистрируем модели
admin.site.register(Article)
admin.site.register(Category)
admin.site.register(UserProfile)
# Удаляем несколько моделей одновременно
admin.site.unregister([Article, Category])
Результат выполнения кода:
"Models ['Article', 'Category'] were successfully unregistered from admin site"
Пример
Метод unregister особенно полезен при создании
пользовательского сайта администратора с ограниченным
набором моделей. Рассмотрим пример с пользовательским
классом AdminSite:
from django.contrib.admin import AdminSite
from myapp.models import Article, Category, UserProfile
class CustomAdminSite(AdminSite):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Регистрируем все модели
self.register(Article)
self.register(Category)
self.register(UserProfile)
# Удаляем модель UserProfile из админки
self.unregister(UserProfile)
custom_site = CustomAdminSite(name='custom_admin')
Результат выполнения кода:
"Custom admin site created with Article and Category models only"
Пример
Важно помнить, что попытка удалить незарегистрированную модель вызывает исключение. Обработаем эту ситуацию:
from django.contrib import admin
from django.contrib.admin.exceptions import NotRegistered
from myapp.models import Article, Comment
try:
admin.site.unregister(Comment)
except NotRegistered:
print("Comment model is not registered in admin site")
Результат выполнения кода:
"Comment model is not registered in admin site"
Смотрите также
-
метод
register,
который регистрирует модели в интерфейсе администратора -
декоратор
admin.register,
который упрощает регистрацию моделей -
класс
ModelAdmin,
который настраивает отображение модели в админке -
класс
AdminSite,
который управляет сайтом администратора