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.