姜戈.通过关闭挂钩上的模型访问数据库



这是我的问题,我试图在关闭信号时通过django模型更新数据库,该信号在init.py文件中声明,但模型对象上的数据库None

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:应用程序尚未加载。">

问题是:附加可以访问应用程序上下文的关闭挂钩的更好方法是什么

如果你想在独立模式下使用django模型,你应该手动调用django.setup(),然后你可以导入并使用你的模型,所以把你的代码改成这样:

import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
django.setup()
from mymodels import MyModel

因此在短期内首先运行django.setup(),然后导入并使用模型

查看django关于这个主题的文档

最新更新