Я использую django стороннее приложение под названием django -solo , чтобы дать мне SingletonModel, который я могу использовать для некоторых глобальных настроек проекта, так как мне не нужно несколько объектов для Представьте эти настройки.
Это прекрасно работает, но в базе данных fre sh мне нужно go войти и создать экземпляр этой модели, иначе она не будет отображаться в Django Admin .
Как заставить django автоматически убедиться, что при запуске django, когда он подключается к базе данных, он создает это?
Я пытался использовать следующий код, который Я получил здесь в моем settings_app/apps.py
, но, похоже, он не срабатывает ни в какой момент:
from django.db.backends.signals import connection_created
def init_my_app(sender, connection, **kwargs):
from .models import MyGlobalSettings
# This creates an instance of MyGlobalSettings if it doesn't exist
MyGlobalSettings.get_solo()
print("Instance of MyGlobalSettings created...")
class SettingsAppConfig(AppConfig):
...
def ready(self):
connection_created.connect(init_my_app, sender=self)
Экземпляр не создан, и я не вижу своего распечатать заявление в журналах. Я что-то не так делаю?
В примере кода также есть кое-что об использовании post_migrate
, но мне не нужен специальный код для запуска после миграции, поэтому я не уверен, что мне это нужно .
Обновление:
Мой INSTALLED_APPS выглядит следующим образом:
INSTALLED_APPS = [
...
'settings_app.apps.SettingsAppConfig',
'solo', # This is for django-solo
]
Также обратите внимание, что метод ready () работает. Если я добавлю к нему оператор печати, я увижу его в журналах. Это просто моя функция init_my_app (), которая не запускается.