我真是一筹莫及。经过十几个小时的故障排除,可能更多,我以为我终于可以做生意了,但接着我发现:

Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label 

网上关于这方面的信息太少了,没有解决方案可以解决我的问题。任何建议都将不胜感激。

我使用的是Python 3.4和Django 1.10。

从我的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',
]

我的app .py文件是这样的:

from django.apps import AppConfig


class DeletenoteConfig(AppConfig):
    name = 'DeleteNote'

and

from django.apps import AppConfig


class LibrarysyncConfig(AppConfig):
    name = 'LibrarySync'

当前回答

在我的例子中,发生这种情况是因为我在项目级urls.py、INSTALLED_APPS和apps.py中使用了相对模块路径,而不是在项目根目录中。即绝对模块路径贯穿始终,而不是相对模块路径+ hacks。

无论我在我的应用程序中的INSTALLED_APPS和apps.py中的路径有多混乱,我都无法让runserver和pytest同时工作,直到它们都根植于项目根目录中。

文件夹结构:

|-- manage.py
|-- config
    |-- settings.py
    |-- urls.py
|-- biz_portal
    |-- apps
        |-- portal
            |-- models.py
            |-- urls.py
            |-- views.py
            |-- apps.py

下面,我可以运行manage.py runserver和gunicorn与wsgi和使用门户应用程序视图没有麻烦,但pytest会错误与ModuleNotFoundError:没有模块命名为'apps'尽管DJANGO_SETTINGS_MODULE配置正确。

配置/ settings.py:

INSTALLED_APPS = [
    ...
    "apps.portal.apps.PortalConfig",
]

biz_portal / apps / portal / apps . py:

class PortalConfig(AppConfig):
    name = 'apps.portal'

配置/ urls . py:

urlpatterns = [
    path('', include('apps.portal.urls')),
    ...
]

将config/settings.py中的app引用更改为biz_portal.apps.portal.apps。PortalConfig和PortalConfig.name到biz_portal.apps。门户允许pytest运行(我还没有对门户视图进行测试),但runserver会出错

模型类apps.portal.models.Business没有显式声明app_label,也不在INSTALLED_APPS中的应用程序中

最后,我为应用程序做了准备。门户查看哪些仍然使用相对路径,并发现config/urls.py也应该使用biz_portal.apps.portal.urls。

其他回答

在我的例子中,我在将代码从Django 1.11.11移植到Django 2.2时得到了这个错误。我正在定义一个自定义的FileSystemStorage派生类。在Django 1.11.11中,我在models.py中有如下一行:

from django.core.files.storage import Storage, DefaultStorage

然后在文件中我有类定义:

class MyFileStorage(FileSystemStorage):

然而,在Django 2.2中,我需要在导入时显式引用FileSystemStorage类:

from django.core.files.storage import Storage, DefaultStorage, FileSystemStorage

瞧!,错误消失。

注意,每个人都在报告Django服务器吐出的错误消息的最后一部分。然而,如果你向上滚动,你会在错误的中间找到原因。

您是否遗漏了将应用程序名称放入设置文件中? myAppNameConfig是由.manage.py createapp myAppName命令在apps.py中生成的默认类。其中myAppName是应用程序的名称。

settings.py

INSTALLED_APPS = [
'myAppName.apps.myAppNameConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

这样,设置文件就会找到您想要调用应用程序的内容。您可以通过在apps.py文件中添加以下代码来更改它的外观

我的应用名称/应用程序.py

class myAppNameConfig(AppConfig):
    name = 'myAppName'
    verbose_name = 'A Much Better Name'

在我的例子中,发生这种情况是因为我在项目级urls.py、INSTALLED_APPS和apps.py中使用了相对模块路径,而不是在项目根目录中。即绝对模块路径贯穿始终,而不是相对模块路径+ hacks。

无论我在我的应用程序中的INSTALLED_APPS和apps.py中的路径有多混乱,我都无法让runserver和pytest同时工作,直到它们都根植于项目根目录中。

文件夹结构:

|-- manage.py
|-- config
    |-- settings.py
    |-- urls.py
|-- biz_portal
    |-- apps
        |-- portal
            |-- models.py
            |-- urls.py
            |-- views.py
            |-- apps.py

下面,我可以运行manage.py runserver和gunicorn与wsgi和使用门户应用程序视图没有麻烦,但pytest会错误与ModuleNotFoundError:没有模块命名为'apps'尽管DJANGO_SETTINGS_MODULE配置正确。

配置/ settings.py:

INSTALLED_APPS = [
    ...
    "apps.portal.apps.PortalConfig",
]

biz_portal / apps / portal / apps . py:

class PortalConfig(AppConfig):
    name = 'apps.portal'

配置/ urls . py:

urlpatterns = [
    path('', include('apps.portal.urls')),
    ...
]

将config/settings.py中的app引用更改为biz_portal.apps.portal.apps。PortalConfig和PortalConfig.name到biz_portal.apps。门户允许pytest运行(我还没有对门户视图进行测试),但runserver会出错

模型类apps.portal.models.Business没有显式声明app_label,也不在INSTALLED_APPS中的应用程序中

最后,我为应用程序做了准备。门户查看哪些仍然使用相对路径,并发现config/urls.py也应该使用biz_portal.apps.portal.urls。

我今天得到了这个错误,在谷歌后结束了这里。现有的答案似乎都与我的情况无关。我唯一需要做的就是从应用程序顶层的__init__.py文件中导入一个模型。我必须将我的导入移动到使用模型的函数中。

Django似乎有一些奇怪的代码可以在很多不同的场景中失败!

作为一个使用Python3的新手,我发现这可能是一个导入错误而不是Django错误

错误的:

from someModule import someClass

正确的:

from .someModule import someClass

这发生在几天前,但我真的无法重现它…我认为只有刚接触Django的人才会遇到这种情况。以下是我所记得的:

尝试在admin.py中注册一个模型:

from django.contrib import admin
from user import User
admin.site.register(User)

尝试运行服务器,错误如下所示

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

将user改为.user,问题就解决了