Django的。通过关闭挂钩上的模型访问数据库

时间:2018-07-17 12:01:15

标签: python django python-3.x django-models

这是我的问题,我试图通过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:应用尚未加载。”

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

1 个答案:

答案 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