【问题标题】:Django: Unable to import models globallyDjango:无法全局导入模型
【发布时间】:2017-10-21 09:47:58
【问题描述】:

我正在运行一些与 django 应用程序相关的 python 脚本。 所以我手动创建了一个文件夹(命名脚本),其中包含一些 python 脚本,但不是使用./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() 作为参数来完成工作现在。

【问题讨论】:

  • from project.modelsapp.models import *from modelsapp.models import Room 怎么样?
  • 第一个给出导入错误
  • 第二个它说了同样的话。
  • NameError: name 'Room' is not defined
  • 我有这个。 modelsapp.apps.ModelsappConfig

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


【解决方案1】:

在你运行 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()

【讨论】:

  • 是的,这就是它的工作原理,但问题仍然是,为什么它不适用于我的方法。
  • 你如何准确地运行你的文件?
  • 我在描述的第二段中提到过。
猜你喜欢
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 2022-01-07
  • 2020-12-14
  • 2018-04-19
  • 2016-08-13
  • 2011-12-12
  • 2019-03-14
相关资源
最近更新 更多