这是我的问题,我试图通过django-model在关闭信号上更新数据库,该信号在 init .py文件中声明,但在模型对象上的 database 是无
import logging
import os
import signal
import sys
from django.db import transaction
logger = logging.getLogger("logger")
def my_signal_handler(*args):
if os.environ.get("RUN_MAIN") is not "true":
return
from mymodels import MyModel
logger.info("update models")
with transaction.atomic():
for model in MyModel.objects.all():
if model.my_flag:
model.my_flag = False
model.save()
sys.exit(0)
signal.signal(signal.SIGINT, my_signal_handler)
此外,当我尝试在my_signal_handler
函数外部导入模型时,应用程序会引发异常“ django.core.exceptions.AppRegistryNotReady:应用尚未加载。”
问题是:追加可以访问应用程序上下文的关闭挂钩的更好方法是什么
答案 0 :(得分:1)
如果要在独立模式下使用django模型,则应手动调用django.setup()
,然后可以导入和使用模型,以便将代码更改为以下形式:
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
django.setup()
from mymodels import MyModel
因此简而言之,首先运行django.setup()
,然后导入并使用模型
在此主题上检查django docs