I'm at wit's end. After a dozen hours of troubleshooting, probably more, I thought I was finally in business, but then I got:
Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label
There is SO LITTLE info on this on the web, and no solution out there has resolved my issue. Any advice would be tremendously appreciated.
I'm using Python 3.4 and Django 1.10.
From my settings.py:
INSTALLED_APPS = [
'DeleteNote.apps.DeletenoteConfig',
'LibrarySync.apps.LibrarysyncConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
And my apps.py files look like this:
from django.apps import AppConfig
class DeletenoteConfig(AppConfig):
name = 'DeleteNote'
and
from django.apps import AppConfig
class LibrarysyncConfig(AppConfig):
name = 'LibrarySync'
This question is related to
python
django
python-3.x
I get the same error and I don´t know how to figure out this problem. It took me many hours to notice that I have a init.py at the same direcory as the manage.py from django.
Before:
|-- myproject
|-- __init__.py
|-- manage.py
|-- myproject
|-- ...
|-- app1
|-- models.py
|-- app2
|-- models.py
After:
|-- myproject
|-- manage.py
|-- myproject
|-- ...
|-- app1
|-- models.py
|-- app2
|-- models.py
It is quite confused that you get this "doesn't declare an explicit app_label" error. But deleting this init file solved my problem.
For PyCharm users: I had an error using not "clean" project structure.
Was:
project_root_directory
+-- src
+-- chat
¦ +-- migrations
¦ +-- templates
+-- django_channels
+-- templates
Now:
project_root_directory
+-- chat
¦ +-- migrations
¦ +-- templates
¦ +-- chat
+-- django_channels
+-- templates
Here is a lot of good solutions, but I think, first of all, you should clean your project structure or tune PyCharm Django settings before setting DJANGO_SETTINGS_MODULE
variables and so on.
Hope it'll help someone. Cheers.
I had this error today trying to run Django tests because I was using the shorthand from .models import *
syntax in one of my files. The issue was that I had a file structure like so:
apps/
myapp/
models/
__init__.py
foo.py
bar.py
and in models/__init__.py
I was importing my models using the shorthand syntax:
from .foo import *
from .bar import *
In my application I was importing models like so:
from myapp.models import Foo, Bar
This caused the Django model doesn't declare an explicit app_label
when running ./manage.py test
.
To fix the problem, I had to explicitly import from the full path in models/__init__.py
:
from myapp.models.foo import *
from myapp.models.bar import *
That took care of the error.
H/t https://medium.com/@michal.bock/fix-weird-exceptions-when-running-django-tests-f58def71b59a
in my case I was able to find a fix and by looking at the everyone else's code it may be the same issue.. I simply just had to add 'django.contrib.sites' to the list of installed apps in the settings.py file.
hope this helps someone. this is my first contribution to the coding community
In my case I got this error when porting code from Django 1.11.11 to Django 2.2. I was defining a custom FileSystemStorage derived class. In Django 1.11.11 I was having the following line in models.py:
from django.core.files.storage import Storage, DefaultStorage
and later in the file I had the class definition:
class MyFileStorage(FileSystemStorage):
However, in Django 2.2 I need to explicitly reference FileSystemStorage
class when importing:
from django.core.files.storage import Storage, DefaultStorage, FileSystemStorage
and voilà!, the error dissapears.
Note, that everyone is reporting the last part of the error message spitted by Django server. However, if you scroll up you will find the reason in the middle of that error mambo-jambo.
Most probably you have dependent imports.
In my case I used a serializer class as a parameter in my model, and the serializer class was using this model: serializer_class = AccountSerializer
from ..api.serializers import AccountSerializer
class Account(AbstractBaseUser):
serializer_class = AccountSerializer
...
And in the "serializers" file:
from ..models import Account
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = (
'id', 'email', 'date_created', 'date_modified',
'firstname', 'lastname', 'password', 'confirm_password')
...
Check also that your migrations are working correctly
Python3 manage.py makemigrations
Python3 manage.py migrate
I had a similar issue, but I was able to solve mine by specifying explicitly the app_label using Meta Class in my models class
class Meta:
app_label = 'name_of_my_app'
O...M...G I was getting this error too and I spent almost 2 days on it and now I finally managed to solve it. Honestly...the error had nothing to do with what the problem was. In my case it was a simple matter of syntax. I was trying to run a python module standalone that used some django models in a django context, but the module itself wasn't a django model. But I was declaring the class wrong
instead of having
class Scrapper:
name = ""
main_link= ""
...
I was doing
class Scrapper(Website):
name = ""
main_link= ""
...
which is obviously wrong. The message is so misleading that I couldn't help myself but think it was some issue with configuration or just using django in a wrong way since I'm very new to it.
I'll share this here for someone newbie as me going through the same silliness can hopefully solve their issue.
After keep on running into this issue and keep on coming back to this question I thought I'd share what my problem was.
Everything that @Xeberdee is correct so follow that and see if that solves the issue, if not this was my issue:
In my apps.py this is what I had:
class AlgoExplainedConfig(AppConfig):
name = 'algo_explained'
verbose_name = "Explain_Algo"
....
And all I did was I added the project name in front of my app name like this:
class AlgoExplainedConfig(AppConfig):
name = '**algorithms_explained**.algo_explained'
verbose_name = "Explain_Algo"
and that solved my problem and I was able to run the makemigrations and migrate command after that! good luck
In my case I was getting this error when trying to run python manage.py runserver
when not connected to my project's virtual environment.
In my case, this was happening because I used a relative module path in project-level urls.py, INSTALLED_APPS
and apps.py
instead of being rooted in the project root. i.e. absolute module paths throughout, rather than relative modules paths + hacks.
No matter how much I messed with the paths in INSTALLED_APPS
and apps.py
in my app, I couldn't get both runserver
and pytest
to work til all three of those were rooted in the project root.
Folder structure:
|-- manage.py
|-- config
|-- settings.py
|-- urls.py
|-- biz_portal
|-- apps
|-- portal
|-- models.py
|-- urls.py
|-- views.py
|-- apps.py
With the following, I could run manage.py runserver
and gunicorn with wsgi and use portal
app views without trouble, but pytest would error with ModuleNotFoundError: No module named 'apps'
despite DJANGO_SETTINGS_MODULE
being configured correctly.
config/settings.py:
INSTALLED_APPS = [
...
"apps.portal.apps.PortalConfig",
]
biz_portal/apps/portal/apps.py:
class PortalConfig(AppConfig):
name = 'apps.portal'
config/urls.py:
urlpatterns = [
path('', include('apps.portal.urls')),
...
]
Changing the app reference in config/settings.py to biz_portal.apps.portal.apps.PortalConfig
and PortalConfig.name
to biz_portal.apps.portal
allowed pytest to run (I don't have tests for portal
views yet) but runserver
would error with
RuntimeError: Model class apps.portal.models.Business doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS
Finally I grepped for apps.portal
to see what's still using a relative path, and found that config/urls.py should also use biz_portal.apps.portal.urls
.
I got this error today and ended up here after googling. None of the existing answers seem relevant to my situation. The only thing I needed to do was to import a model from my __init__.py
file in the top level of an app. I had to move my imports into the functions using the model.
Django seems to have some weird code that can fail like this in so many different scenarios!
TL;DR: Adding a blank __init__.py fixed the issue for me.
I got this error in PyCharm and realised that my settings file was not being imported at all. There was no obvious error telling me this, but when I put some nonsense code into the settings.py, it didn't cause an error.
I had settings.py inside a local_settings folder. However, I'd fogotten to include a __init__.py in the same folder to allow it to be imported. Once I'd added this, the error went away.
In my case, I was trying the same import in manage.py shell
. The shell was messed up with the updated db. I mean, I forgot to restart my shell after updating the DB.
To resolve the issue, I had to stop the shell by the following command:
>>> exit()
then restart the shell by the following command:
$ python3 manage.py shell
Hope this will help somebody like me.
I received this error after I moved the SECRET_KEY
to pull from an environment variable and forgot to set it when running the application. If you have something like this in your settings.py
SECRET_KEY = os.getenv('SECRET_KEY')
then make sure you are actually setting the environment variable.
I just ran into this issue and figured out what was going wrong. Since no previous answer described the issue as it happened to me, I though I would post it for others:
python migrate.py startapp myApp
from my project root folder, then move myApp to a child folder with mv myApp myFolderWithApps/
.python migrate.py makemigrations
. All went well.myFolderWithApps.myApp
to reference my app, but I had forgotten to update MyApp/apps.py. So I corrected myApp/apps.py, settings/INSTALLED_APPS and my import path in my second app.So to make a long story short: - the issue was initially coming from the wrong app name in apps.py of myApp, in settings and in the import path of my second app. - but it was not enough to correct the paths in these three places, as migrations had been created with imports referencing the wrong app name. Therefore, the same error kept happening while migrating (except this time from migrations).
So... check your migrations, and good luck!
I got this one when I used ./manage.py shell
then I accidentally imported from the root project level directory
# don't do this
from project.someapp.someModule import something_using_a_model
# do this
from someapp.someModule import something_using_a_model
something_using_a_model()
If you have got all the config right, it might just be an import mess. keep an eye on how you are importing the offending model.
The following won't work from .models import Business
. Use full import path instead: from myapp.models import Business
I got this error also today. The Message referenced to some specific app of my apps in INSTALLED_APPS. But in fact it had nothing to do with this specific App. I used a new virtual Environment and forgot to install some Libraries, that i used in this project. After i installed the additional Libraries, it worked.
In my case, there was an issue with BASE_DIR in settings.py This is the structure of the packages:
project_root_directory
+-- service_package
+-- db_package
+-- my_django_package
¦ +-- my_django_package
¦ +-- settings.py
¦ +-- ...
+-- my_django_app
+-- migrations
+-- models.py
+-- ...
It worked when updated the settings.py with:
INSTALLED_APPS = [
'some_django_stuff_here...',
'some_django_stuff_here....',
...
'service_package.db_package.my_django_app'
]
And BASE_DIR pointing to the project root
BASE_DIR = Path(__file__).resolve().parent.parent.parent.parent.parent
Came to this after running django in debug, with breakpoint in registry.py -> def get_containing_app_config(self, object_name)
as a noob using Python3 ,I find it might be an import error instead of a Django error
wrong:
from someModule import someClass
right:
from .someModule import someClass
this happens a few days ago but I really can't reproduce it...I think only people new to Django may encounter this.here's what I remember:
try to register a model in admin.py:
from django.contrib import admin
from user import User
admin.site.register(User)
try to run server, error looks like this
some lines...
File "/path/to/admin.py" ,line 6
tell you there is an import error
some lines...
Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label
change user
to .user
,problem solved
I had exactly the same error when running tests with PyCharm. I've fixed it by explicitly setting DJANGO_SETTINGS_MODULE
environment variable. If you're using PyCharm, just hit Edit Configurations button and choose Environment Variables.
Set the variable to your_project_name.settings
and that should fix the thing.
It seems like this error occurs, because PyCharm runs tests with its own manage.py
.
I got this error on importing models in tests, i.e. given this Django project structure:
|-- myproject
|-- manage.py
|-- myproject
|-- myapp
|-- models.py # defines model: MyModel
|-- tests
|-- test_models.py
in file test_models.py
I imported MyModel
in this way:
from models import MyModel
The problem was fixed if it is imported in this way:
from myapp.models import MyModel
Hope this helps!
PS: Maybe this is a bit late, but I not found in others answers how to solve this problem in my code and I want to share my solution.
I've got a similar error while building an API in Django rest_framework.
RuntimeError: Model class apps.core.models.University doesn't declare an explicit > app_label and isn't in an application in INSTALLED_APPS.
luke_aus's answer helped me by correcting my urls.py
from
from project.apps.views import SurgeryView
to
from apps.views import SurgeryView
I had the same problem just now. I've fixed mine by adding a namespace on the app name. Hope someone find this helpful.
apps.py
from django.apps import AppConfig
class SalesClientConfig(AppConfig):
name = 'portal.sales_client'
verbose_name = 'Sales Client'
The issue is that:
You have made modifications to your models file, but not addedd them yet to the DB, but you are trying to run Python manage.py runserver.
Run Python manage.py makemigrations
Python manage.py migrate
Now Python manage.py runserver and all should be fine.
I ran into this error when I tried generating migrations for a single app which had existing malformed migrations due to a git merge. e.g.
manage.py makemigrations myapp
When I deleted it's migrations and then ran:
manage.py makemigrations
the error did not occur and the migrations generated successfully.
I got this error while trying to upgrade my Django Rest Framework app to DRF 3.6.3 and Django 1.11.1.
For anyone else in this situation, I found my solution in a GitHub issue, which was to unset the UNAUTHENTICATED_USER
setting in the DRF settings:
# webapp/settings.py
...
REST_FRAMEWORK = {
...
'UNAUTHENTICATED_USER': None
...
}
If all else fails, and if you are seeing this error while trying to import in a PyCharm "Python console" (or "Django console"):
Try restarting the console.
This is pretty embarassing, but it took me a while before I realized I had forgotten to do that.
Here's what happened:
Added a fresh app, then added a minimal model, then tried to import the model in the Python/Django console (PyCharm pro 2019.2). This raised the doesn't declare an explicit app_label
error, because I had not added the new app to INSTALLED_APPS
.
So, I added the app to INSTALLED_APPS
, tried the import again, but still got the same error.
Came here, read all the other answers, but nothing seemed to fit.
Finally it hit me that I had not yet restarted the Python console after adding the new app to INSTALLED_APPS
.
Note: failing to restart the PyCharm Python console, after adding a new object to a module, is also a great way to get a very confusing ImportError: Cannot import name ...
Source: Stackoverflow.com