Django:无法全局导入模型

时间:2017-05-21 19:29:29

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

我正在运行一些与django应用程序相关的python脚本。 所以我手动创建了一个包含一些python脚本的文件夹(名为scripts),但不使用./manage.py startapp scripts。除此文件夹外,还有一个modelsapp django应用(包含我的模型),然后是project包含settings.pyurls.py的文件夹。

我运行./manage.py shell < scripts/script.py来运行我的脚本。

现在这是我的scripts.py

的示例代码
from modelsapp.models import *
print(Room.objects.all())

这非常有效。现在考虑第二种情况。我现在只需运行./manage.py shell然后输入以下命令 -

>>>from modelsapp.models import *
>>>def init():
...    print(Room.objects.all())
...
>>>init()

这也很有效。但是现在当我在第一种情况下通过文件运行上面的代码时,它会显示NameError: name 'Room' is not defined

看起来我刚刚导入的模型类在函数内部无法访问。 这种行为有点奇怪。

请帮忙。如果我遗漏了任何事情,请在下面做评论。

编辑:由于这有点奇怪的行为而且无法找到任何答案,我只是将类Room直接传递给函数init()作为参数来获取截至目前已完成的工作。

1 个答案:

答案 0 :(得分:0)

运行django shell后,可以使用以下命令运行脚本:

>>>execfile('filename.py')

如果你想在普通的python shell(不使用python manage.py shell)中运行它,你必须这样做:

import django
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project(name.settings")
django.setup()