RuntimeError: Model class myapp.models.class doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS

29 浏览
0 Comments

RuntimeError: Model class myapp.models.class doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS

这个错误已经被多次解决,但没有一个答案似乎适用于我。

我对Python 2和3都有相当丰富的经验。我第一次使用django。我开始制作一个项目。当我在使用基本数据库并第一次调用class.objects之后,出现了标题错误。尝试修复一段时间后,我转向django教程,并决定逐步进行。错误再次发生,具体发生在“编写您的第一个Django应用程序,第3部分”之前,即在使用render之前。

目录:

\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

不要担心页面,这是一个测试应用程序。

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和DATABASES已经配置好了。

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('/', details, name='details'),
    path('/results/', results, name='results'),
    path('/vote/', vote, name='vote'),
]

错误:

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 "", line 1006, in _gcd_import
  File "", line 983, in _find_and_load
  File "", line 967, in _find_and_load_unlocked
  File "", line 677, in _load_unlocked
  File "", line 728, in exec_module
  File "", line 219, in _call_with_frames_removed
  File "C:\Users\panos\Dev\cfehome\src\testdjango\urls.py", line 20, in 
    from src.polls.views import index, details, results, vote
  File "C:\Users\panos\Dev\cfehome\src\polls\views.py", line 3, in 
    from .models import Question
  File "C:\Users\panos\Dev\cfehome\src\polls\models.py", line 7, in 
    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版本3.7

Django版本3.0.4

我已经尝试过:

https://medium.com/@michal.bock/fix-weird-exceptions-when-running-django-tests-f58def71b59a

Django model "doesn't declare an explicit app_label"

还有其他两种解决方案,但我没有链接。

我猜测经过12小时的尝试修复,这可能是兼容性问题或者我的导入和init文件有严重问题。

编辑。

看起来是我的错误。对于所有遇到相同错误的人,首先确保您的应用程序在INSTALLED_APPS中,然后确保您目录中的所有文件都按照django文档建议的方式进行归档(如果您选择以不同的方式进行归档,请确保相应地修复您的导入)。此外,不要在名称中使用诸如django、test之类的词,因为django的搜索可能会遇到它们并覆盖重要的django函数。

0
0 Comments

这个错误是由于在Django的settings.py文件中的INSTALLED_APPS列表中的项目不正确导致的。每个项目应该用逗号分隔。可以尝试像下面这样更新列表:

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',
]

是的,似乎这是最初的错误,但是在我添加了逗号之后,我仍然遇到了相同的错误。后来我发现我有一个导入不一致和目录混乱的问题。幸运的是,我已经解决了这个问题。无论如何,感谢你的答案。

0