Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django外部使用Django ORM会在分配给FK时引发错误_Django_Orm_Shell_Django Models_Importerror - Fatal编程技术网

在Django外部使用Django ORM会在分配给FK时引发错误

在Django外部使用Django ORM会在分配给FK时引发错误,django,orm,shell,django-models,importerror,Django,Orm,Shell,Django Models,Importerror,当从外部shell使用Django ORM时,使用带有ForeignKey字段的模型时,分配给它时会抛出ImportError 下面是我的shell会话的粘贴,它来自./manage.py shell和普通python shell bradyrj@machine:~/workspaces/django/shellgame$ python manage.py shell Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) [GCC 4.4.5] on

当从外部shell使用Django ORM时,使用带有ForeignKey字段的模型时,分配给它时会抛出ImportError

下面是我的shell会话的粘贴,它来自./manage.py shell和普通python shell

bradyrj@machine:~/workspaces/django/shellgame$ python manage.py shell
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from shells.models import Location, Shell
>>> okinawa = Location()
>>> okinawa.title = "Okinawa"
>>> okinawa.description = "Island south of main Japanese Islands, in the Ryukyu Island chain."
>>> okinawa.save()
>>> s = Shell()
>>> s.title = "Conch"
>>> s.description = "it's just a friggin shell"
>>> s.location_found = okinawa
>>> s.save()
>>>
[1]+ Stopped python manage.py shell


bradyrj@machine:~/workspaces/django/shellgame$ cd ../
bradyrj@machine:~/workspaces/django$ cd ../
bradyrj@machine:~/workspaces$ python
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import sys
>>> os.environ["DJANGO_SETTINGS_MODULE"] = 'shellgame.settings'
>>> sys.path.append('/home/bradyrj/workspaces/django')
>>> from shellgame.shells.models import Shell, Location
>>> nc = Location()
>>> nc.title = "Pine Knoll Shores"
>>> nc.description = "best beaches"
>>> nc.save()
>>> s = Shell()
>>> s.title = "shark tooth"
>>> s.description = "old, small, arrowhead-like"
>>> s.location_found = nc
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/django/db/models/fields/related.py", line 354, in __set__
val = getattr(value, self.field.rel.get_related_field().attname)
File "/usr/local/lib/python2.6/dist-packages/django/db/models/fields/related.py", line 758, in get_related_field
data = self.to._meta.get_field_by_name(self.field_name)
File "/usr/local/lib/python2.6/dist-packages/django/db/models/options.py", line 291, in get_field_by_name
cache = self.init_name_map()
File "/usr/local/lib/python2.6/dist-packages/django/db/models/options.py", line 321, in init_name_map
for f, model in self.get_all_related_m2m_objects_with_model():
File "/usr/local/lib/python2.6/dist-packages/django/db/models/options.py", line 396, in get_all_related_m2m_objects_with_model
cache = self._fill_related_many_to_many_cache()
File "/usr/local/lib/python2.6/dist-packages/django/db/models/options.py", line 410, in _fill_related_many_to_many_cache
for klass in get_models():
File "/usr/local/lib/python2.6/dist-packages/django/db/models/loading.py", line 167, in get_models
self._populate()
File "/usr/local/lib/python2.6/dist-packages/django/db/models/loading.py", line 61, in _populate
self.load_app(app_name, True)
File "/usr/local/lib/python2.6/dist-packages/django/db/models/loading.py", line 76, in load_app
app_module = import_module(app_name)
File "/usr/local/lib/python2.6/dist-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
ImportError: No module named shells
>>> 
bradyrj@machine:~/workspace/django/shellgame$python manage.py shell
Python 2.6.6(r266:842921010年9月15日,15:52:39)
[GCC 4.4.5]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
(InteractiveConsole)
>>>从Shell.models导入位置,Shell
>>>冲绳=地点()
>>>冲绳。title=“冲绳”
>>>冲绳岛。description=“琉球岛链中日本主要岛屿以南的岛屿。”
>>>冲绳省
>>>s=Shell()
>>>s.title=“海螺”
>>>s.description=“它只是一个该死的外壳”
>>>美国地点=冲绳
>>>美国储蓄银行
>>>
[1] +停止python manage.py shell
bradyrj@machine:~/workspace/django/shellgame$cd/
bradyrj@machine:~/workspace/django$cd/
bradyrj@machine:~/workspaces$python
Python 2.6.6(r266:842921010年9月15日,15:52:39)
[GCC 4.4.5]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入操作系统
>>>导入系统
>>>os.environ[“DJANGO_设置_模块”]=“shellgame.SETTINGS”
>>>sys.path.append('/home/bradyrj/workspace/django')
>>>从shellgame.shells.models导入外壳,位置
>>>nc=位置()
>>>nc.title=“松树小丘海岸”
>>>nc.description=“最佳海滩”
>>>nc.save()
>>>s=Shell()
>>>s.title=“鲨鱼牙”
>>>s.description=“旧、小、箭头状”
>>>s.location_found=nc
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.6/dist packages/django/db/models/fields/related.py”,第354行,在__
val=getattr(值,self.field.rel.get_related_field().attname)
文件“/usr/local/lib/python2.6/dist packages/django/db/models/fields/related.py”,第758行,在get_related_字段中
data=self.to.\u meta.get\u field\u by\u name(self.field\u name)
文件“/usr/local/lib/python2.6/dist packages/django/db/models/options.py”,第291行,按名称获取字段
cache=self.init\u name\u map()
文件“/usr/local/lib/python2.6/dist packages/django/db/models/options.py”,第321行,在init_name_映射中
对于f,在self中建模。使用模型()获取所有相关对象:
文件“/usr/local/lib/python2.6/dist packages/django/db/models/options.py”,第396行,在get\u所有与\u相关的\u m2m\u对象\u和\u模型中
cache=self.\u fill\u related\u many\u to\u many\u cache()
文件“/usr/local/lib/python2.6/dist packages/django/db/models/options.py”,第410行,在“填充”相关的“多对多”缓存中
对于get_模型()中的klass:
文件“/usr/local/lib/python2.6/dist packages/django/db/models/loading.py”,第167行,在get\u models中
自我.()
文件“/usr/local/lib/python2.6/dist packages/django/db/models/load.py”,第61行,在
self.load\u应用程序(应用程序名称,True)
文件“/usr/local/lib/python2.6/dist-packages/django/db/models/load.py”,第76行,在load_应用程序中
应用程序模块=导入应用程序模块(应用程序名称)
文件“/usr/local/lib/python2.6/dist packages/django/utils/importlib.py”,第35行,在导入模块中
__导入(名称)
ImportError:没有名为Shell的模块
>>> 

这是一个带有项目源代码的repo:

这可能会在settings.py中修复它:

INSTALLED_APPS = (
    ...
    'shellgame.shells',
    ...
)

首先,在指定FK字段时引发异常,而不是在保存时引发异常。其次,
shellgame
显然在路径中缺失。为什么不检查Django shell中的
sys.path
,然后在自己的Python shell中复制它呢?Django项目目录和即时目录都在路径上。整个django项目中的每个目录也需要在路径上吗?@RJBrady:在django shell中,您可以从
shell.models
导入。因此,我认为在Python shell的路径中只缺少了
/home/bradyrj/workspace/django/shellgame
。@RJBrady:您也可以使用
django.core.management
中的
函数
设置环境
。这就是
manage.py
有效的功能。我之前确实尝试过安装环境,但它仍然存在相同的错误。它确实将应用程序目录添加到了路径中,但仅将“project.appname”添加到已安装的应用程序中,效果就大了。这在Linux上通常也是一个问题:)