简体   繁体   中英

PyCharm Django Console - object.values() does not work

When I run the following code in the Django console in PyCharm 3.4.1 , I get an error message:

/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.

When I run the same code in a "normal" django console it works

<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

Is this a bug or is it my fault? Am I doing something wrong?

This is a small incompatibility in PyCharm 3.4 with Django 1.7

When you enter the Django Shell, just type :

import django
django.setup()

python manage.py shell is not starting a normal shell, it's actually doing a complete setup and load of your Django application.

You can achieve the same effect by configuring Django settings in your code.

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

Any keyword arguments that you pass into configure will be added or modified on your settings object.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM