【问题标题】:How do i set django setting to a file which is outside the django tree?如何将 django 设置设置为 django 树之外的文件?
【发布时间】:2017-01-31 06:58:51
【问题描述】:

我有这个 python 文件 tasks.py

import os
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'DjangoWebProject.settings')
    from django.contrib.auth.models import User
    from logreg.models import ActivationCode
    import datetime

    def remove_users():
        print 'hello worldddddddddddddddddddddddddddddddddd'
        inactive_users = []
        activation_codes = ActivationCode.objects.all()
        for activation_code in activation_codes:
            if datetime.datetime.date(activation_code.key_expires) < datetime.datetime.date(datetime.datetime.now()):
                inactive_users.append(activation_code.user_id)

        for inactive_user in inactive_users:
            User.objects.filter(id=inactive_user).delete()

但这是在根文件夹中,当我尝试执行它时,它给了我以下错误

文件 "C:\Users\deybala1\AppData\Local\Continuum\Anaconda2\lib\site-packages\dj ango\apps\registry.py",第 124 行,在 check_apps_ready raise AppRegistryNotReady("应用尚未加载。") django.core.exceptions.AppRegistryNotReady: 应用尚未加载。

我该如何解决这个问题?

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果您正在创建任何使用您的 django 项目的脚本,那么绝对有必要在从 django 或您的项目导入任何内容之前设置项目设置的路径。您在第一行从 django 导入用户模型,在第二行从您的项目导入模型。

    另外,您需要先致电django.setup()

    要解决这个问题,请将 import os 和设置路径到 django 设置到脚本的最开始,然后将 django.setup() 放在后面(正确导入),如下所示:

    # first, set path to project settings
    import os
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'DjangoWebProject.settings')
    import django
    django.setup()
    
    # now you can import anything else
    from django.contrib.auth.models import User
    from logreg.models import ActivationCode
    import datetime
    
    def remove_users():
        print 'hello worldddddddddddddddddddddddddddddddddd'
        inactive_users = []
        activation_codes = ActivationCode.objects.all()
        for activation_code in activation_codes:
            if datetime.datetime.date(activation_code.key_expires) < datetime.datetime.date(datetime.datetime.now()):
                inactive_users.append(activation_code.user_id)
    
        for inactive_user in inactive_users:
            User.objects.filter(id=inactive_user).delete()
    

    【讨论】:

    • 感谢您的连接,但现在我收到此错误文件“C:\Users\deybala1\AppData\Local\Continuum\Anaconda2\lib\site-packages\dj ango\apps\registry.py” ,第 124 行,在 check_apps_ready raise AppRegistryNotReady("Apps are not loaded yet.") django.core.exceptions.AppRegistryNotReady: Apps are not loaded yet.
    • 啊,因为你也错过了django.setup() 电话。我已经更新了我的答案。
    【解决方案2】:

    请注意,您正在尝试在已经需要它的脚本中添加设置模块。

    如果你添加一个特定的 django 命令会不会更容易?多亏了它,您才能使用python manage.py --settings=&lt;path_to_your_settings&gt; 开始您的任务。

    另一个提示:

    将每个 django import 语句移到下面

    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'DjangoWebProject.settings')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 2018-10-06
      • 2020-06-19
      • 2011-02-21
      • 1970-01-01
      相关资源
      最近更新 更多