Problem
You are trying to get User Model
in your Django app but getting ImproperlyConfigured
error instead.
Verbose mode of the error says:
ImproperlyConfigured: Requested setting AUTH_USER_MODEL, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Your workflow would be like below:
(.venv) ~/yadrta $ ipython
Python 3.8.1 (default, Feb 12 2020, 16:30:11)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.18.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from django.contrib.auth import get_user_model
In [2]: User = get_user_model()
---------------------------------------------------------------------------
ImproperlyConfigured Traceback (most recent call last)
<ipython-input-2-6968e3c2733c> in <module>
----> 1 User = get_user_model()
~/yadrta/.venv/lib/python3.8/site-packages/django/contrib/auth/__init__.py in get_user_model()
155 """
156 try:
--> 157 return django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False)
158 except ValueError:
159 raise ImproperlyConfigured("AUTH_USER_MODEL must be of the form 'app_label.model_name'")
~/yadrta/.venv/lib/python3.8/site-packages/django/conf/__init__.py in __getattr__(self, name)
81 """Return the value of a setting and cache it in self.__dict__."""
82 if self._wrapped is empty:
---> 83 self._setup(name)
84 val = getattr(self._wrapped, name)
85 self.__dict__[name] = val
~/yadrta/.venv/lib/python3.8/site-packages/django/conf/__init__.py in _setup(self, name)
62 if not settings_module:
63 desc = ("setting %s" % name) if name else "settings"
---> 64 raise ImproperlyConfigured(
65 "Requested %s, but settings are not configured. "
66 "You must either define the environment variable %s "
ImproperlyConfigured: Requested setting AUTH_USER_MODEL, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
In [3]:
Solution
You should use IPython in django shell. Just run:
$ python manage.py shell -i ipython
You can also look at this post: How to Run Django Shell in Python for detail.
All done!
Top comments (0)