DJANGO_SETTINGS_MODULE未导入我的模型类

2 投票
2 回答
2145 浏览
提问于 2025-04-16 23:39

我在很多帖子中看到,可以使用 DJANGO_SETTINGS_MODULE = APPNAME.settings 来导入模型类,以便在 Linux 命令行上运行 Python 脚本。我尝试运行了:

DJANGO_SETTINGS_MODULE=dishtank.settings PYTHONPATH=$HOME/pythonDirLocation python pythonScript.py

在我的 Python 脚本中,我需要从我某个应用的 model.py 文件中导入一些类,这样我才能编辑数据库中的表格。我在导入所有 Django 设置以便与我的脚本一起运行时,有什么我遗漏的地方吗?

2 个回答

8

从1.4版本开始,setup_environ这个方法就不再推荐使用了,所以现在有了新的解决办法,大家可以参考一下官方文档的指导。

简单来说,你需要把代码调整成下面的样子:

#!/usr/bin/python
# Deprecated way:
# from django.core.management import setup_environ
# import settings
# setup_environ(settings)

import sys
import os

# If you find a solution that does not need the two paths, please comment!
sys.path.append('$path_to_root_of_project$')
sys.path.append('$path_to_root_of_project$/$project_name$')

os.environ['DJANGO_SETTINGS_MODULE'] = '$project_name$.settings'
from django.conf import settings

# Beginning of your script...

需要注意的是,如果合适的话,可能更好的解决办法是把这个脚本整合到一个自定义管理命令里,比如说可以用./manage.py my_command来运行。

1

这里提到的 DJANGO_SETTINGS_MODULE = APPNAME.settings 应该改成 PROJECT.settings。我通常不喜欢这种写法,更喜欢在我的独立脚本的开头使用 setup_environ

from django.core.management import setup_environ
from yourproject import settings

setup_environ(settings)

from yourproject.app.models import YourModel

撰写回答