我正在使用一个名为django-solo的django第三方应用程序为我提供一个SingletonModel,我可以将其用于一些全局项目设置,因为我不需要多个对象来表示这些设置
这非常有效,但是在一个新的数据库上,我需要进去创建这个模型的一个实例,否则它就不会出现在Django Admin中
我怎样才能让django自动确保当django启动时,当它连接到数据库时,它会创建这个
我尝试使用我在settings_app/apps.py
中得到的here代码,但它似乎在任何时候都不会启动:
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)
实例没有创建,并且我在日志中没有看到我的print语句。我做错什么了吗
示例代码也有一些关于使用post_migrate
的内容,但是我不需要任何特殊的代码来在迁移后运行,所以我不确定我是否需要它
更新:
我安装的应用程序如下所示:
INSTALLED_APPS = [
...
'settings_app.apps.SettingsAppConfig',
'solo', # This is for django-solo
]
还要注意ready()方法确实在运行。如果我给它添加一个print语句,我会在日志中看到它。只是我的init_my_app()函数没有运行
我认为数据库连接很可能是在应用程序的
ready()
方法运行之前初始化的,因此在该点附加到信号已经太晚了无论如何,您不需要附加到那里的信号-只需直接在
ready()
方法中执行检查:请注意,这里可能会遇到其他问题-例如,如果尚未在数据库上应用
MyGlobalSettings
模型的迁移(例如,第一次运行manage.py migrate
),您可能需要捕获特定的数据库异常,并在这种情况下跳过此对象的创建,则会出现错误相关问题 更多 >
编程相关推荐