Сделать так, чтобы модели на сайте администратора отображались только в режиме отладки, иначе отображается одна модель

Я хочу, чтобы мои модели отображались в админке только когда переменная debug установлена в True, когда debug установлена в False я хочу отображать только одну модель

Я ищу элегантный способ реализовать это

Я думал, что смогу сделать что-то вроде этого:

if not DEBUG:
   admin.site._registry = {}
   admin.site.register(Model 1)

Но где должен находиться этот код? Я хочу, чтобы он выполнялся после выполнения всех модулей admin.py из всех приложений, в которых происходит регистрация моделей.

Подведем итоги

DEBUG = TRUE На сайте администратора отображается:

  • Модель 1
  • Модель 2
  • Модель 3

DEBUG = FALSE На сайте администратора отображается:

  • Модель 1

Вы можете переопределить один из методов ready в AppConfig любого приложения. Например, если у вас есть приложение с именем app_name, мы можем реализовать AppConfig, которое выглядит следующим образом:

# app_name/apps.py

from django.apps import AppConfig

class AppNameConfig(AppConfig):
    name = 'app_name'

    def ready(self):
        from app_name.models import SomeModel
        from django.conf import settings
        if not settings.DEBUG:
            from django.contrib import admin
            for cls in list(admin.site._registry):
                if cls is not SomeName:
                    admin.site.unregister(cls)
        return super().ready()

с SomeModel моделью, которую вы хотите сохранить.

Вернуться на верх