50👍
As stated in the warning, this happens either :
- When you’re using a model which is not in an
INSTALLED_APPS
; - Or when you’re using a model before its application is loaded.
Since you did refer the app in the INSTALLED_APPS
setting, this is most likely you’re using a model before the app initialisation.
Typically, this occurs when you have from .models import SomeModels
in an apps.py early signal (for example post_migrate
).
Instead of referring your models the classic way here, it is recommended to use AppConfig.get_model().
Check your apps.py file for any model import, and replace them using this api.
For example instead of :
# apps.py
from django.apps import AppConfig
from .models import MyModel
def do_stuff(sender, **kwargs):
MyModel.objects.get() # etc...
class MyAppConfig(AppConfig):
name = 'src.my_app_label'
def ready(self):
post_migrate.connect(do_stuff, sender=self)
Do this :
# apps.py
from django.apps import AppConfig
def do_stuff(sender, **kwargs):
mymodel = sender.get_model('MyModel')
mymodel.objects.get() # etc...
class MyAppConfig(AppConfig):
name = 'src.my_app_label'
def ready(self):
post_migrate.connect(do_stuff, sender=self)
Note this enforcement was introduced in bug #21719.
51👍
Similar error. In my case the error was:
RemovedInDjango19Warning: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
class Site(models.Model):
My solution was:
Added 'django.contrib.sites'
to INSTALLED_APPS
- [Django]-Can you change a field label in the Django Admin application?
- [Django]-Django custom field validator vs. clean
- [Django]-Django 1.7 – "No migrations to apply" when run migrate after makemigrations
23👍
I suspect it’ll be only a tiny minority of people who see this error for whom it will be caused by the same thing as me, but in case it helps someone else it seems worth adding this answer!
I suddenly saw lots of these errors when running tests at one point – it turned out that I had accidentally created a __init__.py
at the top level of my Django project when it was meant to be in a subdirectory. The clue that this was happening is that the errors, which were like:
/home/mark/mystupiddjangoproject/alerts/models.py:15: RemovedInDjango19Warning: Model class mystupiddjangoproject.alerts.models.Alert doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
class Alert(models.Model):
… included the name of directory the project is in (mystupiddjangoproject
) in the fully qualified model name, which should have been: alerts.models.Alert
.
To fix this, I just needed to do:
rm __init__.py
rm __init__.pyc
- [Django]-AngularJS with Django – Conflicting template tags
- [Django]-ImportError: No module named django.core.wsgi Apache + VirtualEnv + AWS + WSGI
- [Django]-Difference between filter with multiple arguments and chain filter in django
10👍
I was getting a similar error, but rather than complaining about models in my apps, it was complaining about models in contrib
packages. For example:
C:\Program Files\Python 2.7\lib\site-packages\django\contrib\sessions\models.py:27: RemovedInDjango19Warning: Model class django.contrib.sessions.models.Session doesn’t declare an explicit app_label and either isn’t in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
class Session(models.Model):
This is caused by a bad ordering in the INSTALLED_APPS
property in settings.py
. My settings.py
initially contained:
INSTALLED_APPS = (
'my_app_1',
'my_app_2',
'my_app_3',
'bootstrap_admin',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.messages',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.staticfiles',
'social.apps.django_app.default',
'mathfilters',
'rest_framework',
)
my_app_*
use models from the contrib
packages. The error is caused by using models before declaring them (i.e. Django
should know about the apps containing those models before using them).
In order to solve this, the order in which the apps are declared needs to be changed. Specifically, all Django apps should come before the user defined apps. In my case, the correct INSTALLED_APPS
would look like:
INSTALLED_APPS = (
'bootstrap_admin',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.messages',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.staticfiles',
'social.apps.django_app.default',
'mathfilters',
'rest_framework',
'my_app_1',
'my_app_2',
'my_app_3',
)
Now I know this might not directly answer your question, but it answers a related one, and since this is the only SO link that shows on Google when pasting the error, I have answered it here.
However, I believe a similar situation is causing your problem:
Make sure you declare the “dependency” apps before the apps using them! The errors don’t really specify which app is using a model, so you would have to push the app containing the model it mentions to the top, one by one, until the error disappears.
- [Django]-How to change site title, site header and index title in Django Admin?
- [Django]-How do you filter a nested serializer in Django Rest Framework?
- [Django]-Sending an SMS to a Cellphone using Django
8👍
Add a meta class to your model with an app_label attribute.
class Meta:
app_label = 'app_model_belongs_to'
Hope this works!
EDIT:
The reason for this is usually that the model exists outside of the standard locations.
For more information refer to:
https://docs.djangoproject.com/en/1.8/ref/models/options/#app-label
- [Django]-Easiest way to rename a model using Django/South?
- [Django]-Proper way to consume data from RESTFUL API in django
- [Django]-How do I get user IP address in Django?
5👍
The Django 1.9 way of handling this and giving your app a nice name in the admin is to do the following:
Add a file in your app named apps.py
and add the following to it:
#apps.py
from django.apps import AppConfig
class YourAppNameAppConfig(AppConfig):
name = 'yourappname'
verbose_name = 'Your App Name Looking Right'
Then, in your app’s __init__.py
file, add the following:
#__init__.py
default_app_config = 'youappname.apps.YourAppNameAppConfig'
- [Django]-Django datefield filter by weekday/weekend
- [Django]-How do I get the object if it exists, or None if it does not exist in Django?
- [Django]-Itertools.groupby in a django template
5👍
I faced this issue as well and it was related to the way I was loading the signals.py module from an app.
As you may now, it’s quite common to have circular import issues between the signals and the models, and it’s usual to import them from the app’s __init__.py
file or from the bottom of the models.py
file to avoid them.
Well, I was using the __init__.py
approach, and just moving the import signals
statement to the bottom of my models.py
file solved the issue.
Hope this helps someone else!
- [Django]-TemplateDoesNotExist – Django Error
- [Django]-Parsing unicode input using python json.loads
- [Django]-Test sending email without email server
5👍
I has this problem after upgrade Django from 1.8 to 1.9.1:
RuntimeError at /
Model class blog.models.BlogCategory doesn’t declare an explicit app_label and isn’t in an application in INSTALLED_APPS.
This help to resolve:
in blog/models.py:
class BlogCategory(models.Model):
some vars & methods
class Meta:
app_label = 'BlogCategory'
It’s work on 100%.
- [Django]-Django vs other Python web frameworks?
- [Django]-Django forms, inheritance and order of form fields
- [Django]-Python Socket.IO client for sending broadcast messages to TornadIO2 server
4👍
I had the same problem. I put a breakpoint in django.db.models.base.py:line82 and try to figure out what is causing this warning message.
# Look for an application configuration to attach the model to.
app_config = apps.get_containing_app_config(module)
Basically, if your app does not exist by this time, you get that warning. I realized that my problem was that I have a third party framework (in my case, haystack) that tries to import one of my custom models.
Maybe you also have a third party package listed in INSTALLED_APPS before your custom apps and your third party package references your custom apps? This would be possible if you are using something like Django rest framework as well.
- [Django]-AWS: can't connect to RDS database from my machine
- [Django]-What's the cleanest, simplest-to-get running datepicker in Django?
- [Django]-Organizing Django unit tests
2👍
Sometimes an invalid .pyc files that doesnt match with the current source code caused this problem.
I removed all .pyc to refresh all of them using this bash
find . -name "*.pyc" -exec rm -rf {} \;
- [Django]-Django-debug-toolbar not showing up
- [Django]-"No installed app with label 'admin'" running Django migration. The app is installed correctly
- [Django]-With DEBUG=False, how can I log django exceptions to a log file
1👍
The easiest and simplest way to solve this is to place the “import signals” command at the BOTTOM of the Model file you are working with. This ensures that the models are all loaded before the signals for that model are imported. You would have to do this for each model you are importing (if you use receivers linked to particular models), or in the models.py for the app that comes at the end of the “installed apps” in your settings.
The other solutions are only required if you are dealing with non-model type signals, where the models will never be imported first.
Why this is not noted in the docs is a mystery, because I just got caught by it, until I remembered that you have to do that.
models.py
from django.db import models
class MyModel(models.Model):
myfield1 = models.CharField()
myfield2 = models.CharField()
import signals
And then in signals.py:
from django.db.models.signals import pre_save # Or whatever you are using
from django.dispatch import receiver
from .models import MyModel
@receiver(pre_save, sender=MyModel)
def my_receiver(sender, instance, **kwargs):
mysender = sender
print mysender
Like that.
- [Django]-Django 1.5 – How to use variables inside static tag
- [Django]-Need to convert a string to int in a django template
- [Django]-What’s the difference between a project and an app in Django world?
0👍
I didn’t receive any error in django 1.7.
While migrating to django 1.8 I got this error.
Reason was the signal were defined in app/signal_receiver.py
.
I created a apps.py
from django.apps import AppConfig
class TasksConfig(AppConfig):
name = 'core'
verbose_name = "core"
def ready(self):
import core.signal.handler
I moved signal receiver in handler.py
inside signal package.
- [Django]-Django order_by() filter with distinct()
- [Django]-How to use Django ImageField, and why use it at all?
- [Django]-Django override save for model only in some cases?
-1👍
I got this error because do with error:
urlpatterns = patterns(
url(r'^my_link/$', views.MyView.as_view(), name='my_view'),...
Do right:
urlpatterns = patterns(
'', # Add this line
url(r'^my_link/$', views.MyView.as_view(), name='my_view'),
...)
- [Django]-How to force Django models to be released from memory
- [Django]-Getting Django admin url for an object
- [Django]-Django: no such table: django_session