Django 1.7 throws django.core.exceptions.AppRegistryNotReady: Models aren’t loaded yet

This is the traceback on my windows system.

Traceback (most recent call last):
  File "D:AMDworkspacesteelrumorsmanage.py", line 9, in <module>
    django.setup()
  File "D:AMDDjangodjango-django-4c85a0ddjango__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "D:AMDDjangodjango-django-4c85a0ddjangoappsregistry.py", line 108, in populate
    app_config.import_models(all_models)
  File "D:AMDDjangodjango-django-4c85a0ddjangoappsconfig.py", line 197, in import_models
    self.models_module = import_module(models_module_name)
  File "C:Python27libimportlib__init__.py", line 37, in import_module
    __import__(name)
  File "C:Python27libsite-packagesregistrationmodels.py", line 15, in <module>
    User = get_user_model()
  File "D:AMDDjangodjango-django-4c85a0ddjangocontribauth__init__.py", line 135, in get_user_model
    return django_apps.get_model(settings.AUTH_USER_MODEL)
  File "D:AMDDjangodjango-django-4c85a0ddjangoappsregistry.py", line 199, in get_model
    self.check_models_ready()
  File "D:AMDDjangodjango-django-4c85a0ddjangoappsregistry.py", line 131, in check_models_ready
    raise AppRegistryNotReady("Models aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

And my manage.py looks like this:

import os
import sys
import django

if __name__ == "__main__":

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "steelrumors.settings")
    django.setup()
    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

I get this error when i am trying to use registration app in Django 1.7

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Running these commands solved my problem (credit to this answer):

import django
django.setup()

However I’m not sure why I need this. Comments would be appreciated.

Method 2

This is what solved it for us and these folks:

Our project started with Django 1.4, we went to 1.5 and then to 1.7. Our wsgi.py looked like this:

import os

from django.core.handlers.wsgi import WSGIHandler

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = WSGIHandler()

When I updated to the 1.7 style WSGI handler:

import os

from django.core.wsgi import get_wsgi_application

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = get_wsgi_application()

Everything works now.

Method 3

The issue is in your registration app. It seems django-registration calls get_user_module() in models.py at a module level (when models are still being loaded by the application registration process). This will no longer work:

try:
    from django.contrib.auth import get_user_model
    User = get_user_model()
except ImportError:
    from django.contrib.auth.models import User

I’d change this models file to only call get_user_model() inside methods (and not at module level) and in FKs use something like:

user = ForeignKey(settings.AUTH_USER_MODEL)

BTW, the call to django.setup() shouldn’t be required in your manage.py file, it’s called for you in execute_from_command_line. (source)

Method 4

Just encountered the same issue. The problem is because of django-registration incompatible with django 1.7 user model.

A simple fix is to change these lines of code, at your installed django-registration module::

try:
    from django.contrib.auth import get_user_model
    User = get_user_model()
except ImportError:
    from django.contrib.auth.models import User

to::

from django.conf import settings
try:
    from django.contrib.auth import get_user_model
    User = settings.AUTH_USER_MODEL
except ImportError:
    from django.contrib.auth.models import User

Mine is at .venv/local/lib/python2.7/site-packages/registration/models.py (virtualenv)

Method 5

This works for me for Django 1.9 . The Python script to execute was in the root of the Django project.

    import django 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PROJECT_NAME.settings")
    django.setup()
    from APP_NAME.models import *

Set PROJECT_NAME and APP_NAME to yours

Method 6

Another option is that you have a duplicate entry in INSTALLED_APPS. That threw this error for two different apps I tested. Apparently it’s not something Django checks for, but then who’s silly enough to put the same app in the list twice. Me, that’s who.

Method 7

Do you have a Python virtual environment that you need to enter before you run manage.py?

I ran into this error myself, and that was the problem.

Method 8

I ran into this issue when I use djangocms and added a plugin (in my case: djangocms-cascade). Of course I had to add the plugin to the INSTALLED_APPS. But the order is here important.

To place ‘cmsplugin_cascade’ before ‘cms’ solved the issue.

Method 9

install django-registration-redux==1.1 instead django-registration, if you using django 1.7

Method 10

./manage.py migrate

This solved my issue

Method 11

If you get this error in a context of creating ForeignKey relations between models. Example below raises AppRegistryNotReady: Models aren't loaded yet error.

from my_app.models import Workspace

workspace = models.ForeignKey(Workspace)

Then please try to reffer to a model as a string.

from my_app.models import Workspace

# One of these two lines might fix the problem.
workspace = models.ForeignKey('Workspace')
workspace = models.ForeignKey('my_app.Workspace')

Method 12

I’m damn sure this is isn’t late. If you are using Django 4 and .env file for your settings, you are going to encounter this error if you define a value in settings.py while that value does not exist in .env file:

See following scenario:

I had PLAID_KEY in my settings.py as follows

PLAID_KEY=env('PLAID_KEY')

However, PLAID_KEY did not exist in my .env file, adding it fixed it.

Method 13

Your manage.py is “wrong”; I don’t know where you got it from, but that’s not a 1.7 manage.py – were you using some funky pre-release build or something?

Reset your manage.py to the conventional, as below, and things Should Just Work:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

Method 14

My Problem was from init.py . i made an app and wanted to do this :

from MY_APP import myfunc

instead of :

from MY_APP.views import myfunc

when i rolled back my changes to these parts . everything worked just fine.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x