PyCharm Django控制台 - object.values()不起作用

时间:2014-10-12 15:14:08

标签: python django model pycharm

当我在PyCharm 3.4.1的Django控制台中运行以下代码时,收到错误消息:

/home/<user>/Dokuments/django/<folder>/env/bin/python -u /opt/pycharm/helpers/pydev/pydevconsole.py 47532 53281
PyDev console: starting.import sys; print('Python %s on %s' % (sys.version, sys.platform))
Python 3.4.1 (default, Sep 10 2014, 19:15:49) 
[GCC 4.9.1] on linux
sys.path.extend(['/home/<user>/Dokumente/django/<folder>', '/opt/pycharm/helpers/pycharm', '/opt/pycharm/helpers/pydev'])
import django_manage_shell; django_manage_shell.run("/home/<user>/Dokumente/django/<folder>")
>>> from <app> import models
>>> models.<Model>.objects.values()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/db/models/manager.py", line 92, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/db/models/query.py", line 626, in values
    return self._clone(klass=ValuesQuerySet, setup=True, _fields=fields)
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/db/models/query.py", line 961, in _clone
    c._setup_query()
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/db/models/query.py", line 1129, in _setup_query
    self.query.add_fields(self.field_names, True)
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/db/models/sql/query.py", line 1610, in add_fields
    allow_many=allow_m2m)
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/db/models/sql/query.py", line 1419, in setup_joins
    names, opts, allow_many, fail_on_missing=True)
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/db/models/sql/query.py", line 1339, in names_to_path
    field, model, direct, m2m = opts.get_field_by_name(name)
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/db/models/options.py", line 416, in get_field_by_name
    cache = self.init_name_map()
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/db/models/options.py", line 445, in init_name_map
    for f, model in self.get_all_related_m2m_objects_with_model():
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/db/models/options.py", line 563, in get_all_related_m2m_objects_with_model
    cache = self._fill_related_many_to_many_cache()
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/db/models/options.py", line 577, in _fill_related_many_to_many_cache
    for klass in self.apps.get_models():
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/functools.py", line 434, in wrapper
    result = user_function(*args, **kwds)
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/apps/registry.py", line 168, in get_models
    self.check_models_ready()
  File "/home/<user>/Dokumente/django/<folder>/env/lib/python3.4/site-packages/django/apps/registry.py", line 131, in check_models_ready
    raise AppRegistryNotReady("Models aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

当我在“普通”django控制台中运行相同的代码时,它可以正常工作

<user>@notebook:~/Dokumente/django/<folder>$ source env/bin/activate
(env)<user>@notebook:~/Dokumente/django/<folder>$ python manage.py shell
Python 3.4.1 (default, Sep 10 2014, 19:15:49) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from <app> import models
>>> models.<Model>.objects.values()
# lists all values

这是一个错误还是我的错?我做错了吗?

2 个答案:

答案 0 :(得分:5)

这是PyCharm 3.4与Django 1.7的小不兼容性

当您输入Django Shell时,只需输入:

import django
django.setup()

答案 1 :(得分:2)

python manage.py shell没有启动普通的shell,它实际上正在完成你的Django应用程序的设置和加载。

您可以在代码中通过configuring Django settings获得相同的效果。

from django.conf import settings
if not settings.configured:
    settings.configure(DEBUG=True)

您在配置中传递的任何关键字参数都将在您的设置对象上添加或修改。