Метод unregister

Метод unregister применяется к экземпляру класса AdminSite и удаляет указанную модель (или список моделей) из интерфейса администратора. Это позволяет динамически управлять доступными моделями в админке, скрывая те из них, которые не должны отображаться в данный момент. Метод полезен при переопределении стандартного сайта администратора или при создании пользовательских административных интерфейсов с различными наборами моделей.

Синтаксис

pythonadmin_site.unregister(model)

Где admin_site - экземпляр класса AdminSite, а model - модель или список моделей, которые нужно удалить из регистрации. Если модель не была зарегистрирована ранее, метод вызовет исключение NotRegistered.

Пример

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

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

# Регистрируем модели
admin.site.register(Article)
admin.site.register(Category)

# Удаляем модель Article из админки
admin.site.unregister(Article)

Результат выполнения кода:

python"Model Article was successfully unregistered from admin site"

Пример

Теперь рассмотрим, как удалить несколько моделей одновременно, передав список:

pythonfrom 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])

Результат выполнения кода:

python"Models ['Article', 'Category'] were successfully unregistered from admin site"

Пример

Метод unregister особенно полезен при создании пользовательского сайта администратора с ограниченным набором моделей. Рассмотрим пример с пользовательским классом AdminSite:

pythonfrom 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')

Результат выполнения кода:

python"Custom admin site created with Article and Category models only"

Пример

Важно помнить, что попытка удалить незарегистрированную модель вызывает исключение. Обработаем эту ситуацию:

pythonfrom 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")

Результат выполнения кода:

python"Comment model is not registered in admin site"

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

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