Reputation: 61
This error has been addressed a lot of times but none of the answers seems to applied to me. I am fairly experienced with Python 2 and 3. I used django for the first time.I started making a project. As i was working with a basic DB and after i called the class.objects for the first time the title error occurred. After some time trying to fix it i moved to the django tutorial and i decided to do everything step by step. The error occured again specifically at "Writing your first Django app, part 3" right befor using render.
Directories:
\home_dir
\lib
\Scripts
\src
\.idea
\pages
\polls
\migrations
__init__.py
admin.py
apps.py
models.py
test.py
views.py
\templates
\django_proj
__init__.py
asgi.py
manage.py
settings.py
urls.py
wsgi.py
__init__.py
db.sqlite3
manage.py
Do not bother with pages it's a test app.
django_proj\settings.py:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
# My App
'polls'
'pages'
]
TEMPLATES and DATABASES are well configured
polls\apps.py:
from django.apps import AppConfig
class PollsConfig(AppConfig):
name = 'polls'
polls\models.py
from django.db import models
from django.utils import timezone
import datetime
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
published_date = models.DateTimeField('date published')
objects = models.Manager()
def __str__(self):
return self.question_text
def was_pub_recently(self):
return self.published_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
vote = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
polls\views.py
from django.shortcuts import render
from django.http import HttpResponse
from src.polls.models import Question
from django.template import loader
# Create your views here.
def index(request, *args, **kwargs):
latest_question_list = Question.objects.order_by('-published_date'[:5])
template = loader.get_template('polls/index.html')
context = {
'latest_question_list': latest_question_list
}
return HttpResponse(template.render(context, request))
def details(request, question_id, *args, **kwargs):
return HttpResponse(f"Question: {question_id}")
def results(request, question_id, *args, **kwargs):
response = f"Results for question {question_id}"
return HttpResponse(response)
def vote(request, question_id, *args, **kwargs):
return HttpResponse(f"Vote on question {question_id}")
django_proj\urls.py
from django.contrib import admin
from django.urls import include, path
from src.pages.views import home_view, base_view, context_view
from src.polls.views import index, details, results, vote
urlpatterns = [
path('', home_view, name='home'),
path('admin/', admin.site.urls),
path('base/', base_view, name='base'),
path('context/', context_view, name="context"),
# Polls
path('home/', index, name='index'),
path('<int:question_id>/', details, name='details'),
path('<int:question_id>/results/', results, name='results'),
path('<int:question_id>/vote/', vote, name='vote'),
]
Error:
Traceback (most recent call last):
File "c:\users\panos\appdata\local\programs\python\python37-32\lib\threading.py", line 926, in _bootstrap_inner
self.run()
File "c:\users\panos\appdata\local\programs\python\python37-32\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\utils\autoreload.py", line 53, in wrapper
fn(*args, **kwargs)
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\core\management\commands\runserver.py", line 117, in inner_run
self.check(display_num_errors=True)
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\core\management\base.py", line 395, in check
include_deployment_checks=include_deployment_checks,
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\core\management\base.py", line 382, in _run_checks
return checks.run_checks(**kwargs)
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\core\checks\registry.py", line 72, in run_checks
new_errors = check(app_configs=app_configs)
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\core\checks\urls.py", line 13, in check_url_config
return check_resolver(resolver)
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\core\checks\urls.py", line 23, in check_resolver
return check_method()
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\urls\resolvers.py", line 407, in check
for pattern in self.url_patterns:
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\utils\functional.py", line 48, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\urls\resolvers.py", line 588, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\utils\functional.py", line 48, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\urls\resolvers.py", line 581, in urlconf_module
return import_module(self.urlconf_name)
File "c:\users\panos\appdata\local\programs\python\python37-32\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:\Users\panos\Dev\cfehome\src\testdjango\urls.py", line 20, in <module>
from src.polls.views import index, details, results, vote
File "C:\Users\panos\Dev\cfehome\src\polls\views.py", line 3, in <module>
from .models import Question
File "C:\Users\panos\Dev\cfehome\src\polls\models.py", line 7, in <module>
class Question(models.Model):
File "C:\Users\panos\Dev\cfehome\lib\site-packages\django\db\models\base.py", line 115, in __new__
"INSTALLED_APPS." % (module, name)
RuntimeError: Model class src.polls.models.Question doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
Python version 3.7
Django version 3.0.4
I have already tried:
https://medium.com/@michal.bock/fix-weird-exceptions-when-running-django-tests-f58def71b59a
Django model "doesn't declare an explicit app_label"
and other two solutions but i dont have the links
My speculation after 12 hours of trying to fix this is that is a compatibility issues or something really wrong with my imports and init files.
Edit. It seems like it was my mistake. For all those who encounter the same error firstly make sure you have your app into INSTALLED_APPS, next that all your files in you directories are well archived as django docs suggest (if you choose to make them in deferent way make sure you also fix your imports accordingly). Also don't use words in your names like django, test,.... because django's searchers may encounter them and override important django functions.
Upvotes: 4
Views: 13809
Reputation: 1
I had the same problem for quite sometime. I was trying to import a model in a different app but got the runtime error saying the app is not explicitly declared. Later I realized all my apps are in subdirectory named after my project. That was all I had to tweak.
before: from myapp.models import Model
after: from myproject.myapp.models import Model
Upvotes: 0
Reputation: 250
Your INSTALLED_APPS list in django_proj\settings.py is incorrect. Each item in the list should be separated with commas. Try updating your list like below.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
# My App
'polls',
'pages',]
Upvotes: 12