Django模型“没有声明一个明确的app_label”

时间:2016-10-23 18:44:56

标签: python django python-3.x

我已经结束了。经过十几个小时的故障排除,可能更多,我以为我终于开始营业,但后来我得到了:

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

我的apps.py文件看起来像这样:

from django.apps import AppConfig


class DeletenoteConfig(AppConfig):
    name = 'DeleteNote'

from django.apps import AppConfig


class LibrarysyncConfig(AppConfig):
    name = 'LibrarySync'

31 个答案:

答案 0 :(得分:57)

您是否遗漏了将应用程序名称输入设置文件? 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文件中的显示方式

myAppName / apps.py

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

答案 1 :(得分:12)

当我使用./manage.py shell时我得到了这个 然后我不小心从根项目级目录导入

# 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()

答案 2 :(得分:12)

使用PyCharm运行测试时,我遇到了完全相同的错误。我通过明确设置DJANGO_SETTINGS_MODULE环境变量修复了它。如果您正在使用PyCharm,只需点击编辑配置按钮并选择环境变量

将变量设置为your_project_name.settings,这应该可以解决问题。

似乎发生了这个错误,因为PyCharm使用自己的manage.py运行测试。

答案 3 :(得分:10)

我刚才遇到了同样的问题。我通过在应用名称上添加命名空间来修复我的问题。希望有人觉得这很有帮助。

<强> apps.py

from django.apps import AppConfig    

class SalesClientConfig(AppConfig):
        name = 'portal.sales_client'
        verbose_name = 'Sales Client'

答案 4 :(得分:10)

我遇到相同的错误,但我不知道如何解决此问题。我花了好几个小时才注意到,我在与django的manage.py相同的目录中有一个init.py。

之前:

|-- myproject
  |-- __init__.py
  |-- manage.py
  |-- myproject
    |-- ...
  |-- app1
    |-- models.py
  |-- app2
    |-- models.py

之后:

|-- myproject
  |-- manage.py
  |-- myproject
    |-- ...
  |-- app1
    |-- models.py
  |-- app2
    |-- models.py

很困惑您收到此“未声明显式app_label”错误。但是删除此 init 文件解决了我的问题。

答案 5 :(得分:5)

使用 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,问题已解决

答案 6 :(得分:2)

我遇到了类似的问题,但是我可以通过在模型类中使用Meta类明确指定app_label来解决我的问题

class Meta:
    app_label  = 'name_of_my_app'

答案 7 :(得分:1)

尝试将我的Django Rest Framework应用程序升级到DRF 3.6.3和Django 1.11.1时出现此错误。

对于这种情况下的其他任何人,我找到了我的解决方案in a GitHub issue,这是取消设置DRF settings中的UNAUTHENTICATED_USER设置:

# webapp/settings.py
...
REST_FRAMEWORK = {
    ...
    'UNAUTHENTICATED_USER': None
    ...
}

答案 8 :(得分:1)

就我而言,当我未连接到项目的虚拟环境时尝试运行python manage.py runserver时遇到此错误。

答案 9 :(得分:1)

对于PyCharm用户:使用“干净”项目结构时出现错误。

原是:

project_root_directory
└── src
    ├── chat
    │   ├── migrations
    │   └── templates
    ├── django_channels
    └── templates

现在:

project_root_directory
├── chat
│   ├── migrations
│   └── templates
│       └── chat
├── django_channels
└── templates

这里有很多好的解决方案,但是我认为,首先,您应该在设置DJANGO_SETTINGS_MODULE变量之前清理项目结构或调整PyCharm Django设置,等等。

希望它会帮助某人。干杯。

答案 10 :(得分:1)

在继续遇到这个问题并继续回到这个问题之后,我想我会分享我的问题所在。

@Xeberdee的所有信息都是正确的,请遵循此步骤,看看是否可以解决问题,如果不是,这是我的问题:

在我的apps.py中,这就是我拥有的:

class AlgoExplainedConfig(AppConfig):
    name = 'algo_explained'
    verbose_name = "Explain_Algo"
    ....

我所做的就是将项目名称添加到我的应用名称之前,如下所示:

class AlgoExplainedConfig(AppConfig):
name = '**algorithms_explained**.algo_explained'
verbose_name = "Explain_Algo"

这解决了我的问题,之后,我能够运行makemigrations和migration命令!祝你好运

答案 11 :(得分:1)

如果所有其他方法均失败,并且在尝试导入PyCharm“ Python控制台”(或“ Django控制台”)时遇到此错误:

尝试重新启动控制台。

这真是令人尴尬,但是花了我一段时间我才意识到我忘记这样做了。

这是发生了什么:

添加了一个新的应用程序,然后添加了一个最小模型,然后尝试在Python / Django控制台(PyCharm pro 2019.2)中导入该模型。这引发了doesn't declare an explicit app_label错误,因为我没有将新应用添加到INSTALLED_APPS中。 因此,我将应用程序添加到INSTALLED_APPS,再次尝试了导入,但是仍然遇到相同的错误。

来这里,阅读所有其他答案,但似乎没有合适的答案。

最后,令我惊讶的是,在将新应用添加到INSTALLED_APPS之后,我还没有重新启动Python控制台。

注意:在将新对象添加到模块后,未能重新启动PyCharm Python控制台也是获得令人困惑的ImportError: Cannot import name ...

的好方法

答案 12 :(得分:1)

如果所有配置正确,则可能只是导入混乱。密切关注您如何导入违规模型。

以下内容将不起作用from .models import Business。请使用完整的导入路径:from myapp.models import Business

答案 13 :(得分:1)

在我的情况下,我能够找到一个修复程序,并且通过查看其他人的代码也可能是同样的问题。.我只需要将'django.contrib.sites'添加到已安装应用程序列表中即可。 settings.py文件。

希望这对某人有帮助。这是我对编码社区的第一个贡献

答案 14 :(得分:1)

就我而言,将代码从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服务器随地吐痰的错误消息的最后一部分。但是,如果向上滚动,则会在错误mambo-jambo的中间找到原因。

答案 15 :(得分:1)

在Django rest_framework中构建API时遇到类似的错误。

  

RuntimeError:模型类apps.core.models.University没有声明显式> app_label,并且不在INSTALLED_APPS中的应用程序中。

luke_aus的答案通过纠正我的 urls.py

对我有帮助

来自

from project.apps.views import SurgeryView

from apps.views import SurgeryView

答案 16 :(得分:1)

我刚遇到这个问题并找出问题所在。由于没有先前的答案描述了这个问题,因为它发生在我身上,但我会将其发布给其他人:

  • 问题来自于从我的项目根文件夹中使用python migrate.py startapp myApp,然后将myApp移动到mv myApp myFolderWithApps/的子文件夹。
  • 我写了myApp.models并运行了python migrate.py makemigrations。一切顺利。
  • 然后我对另一个从myApp导入模型的应用程序做了同样的事情。 KABOOM!我在执行makemigrations时遇到了这个错误。那是因为我必须使用myFolderWithApps.myApp来引用我的应用,但我忘了更新MyApp / apps.py。所以我在第二个应用程序中更正了myApp / apps.py,settings / INSTALLED_APPS和我的导入路径。
  • 然后错误不断发生:原因是我尝试使用错误的路径从myApp导入模型进行迁移。我试图纠正迁移文件,但我更容易重置数据库并删除迁移从头开始。

总而言之:   - 问题最初来自myApp的apps.py中的错误应用名称,设置和我的第二个应用的导入路径。   - 但这还不足以纠正这三个地方的路径,因为迁移是使用导入引用错误的应用名称创建的。因此,迁移时会发生同样的错误(此次迁移除外)。

所以...检查你的迁移,祝你好运!

答案 17 :(得分:1)

我在测试中导入模型时出现此错误,即给定此Django项目结构:

|-- myproject
    |-- manage.py
    |-- myproject
    |-- myapp
        |-- models.py  # defines model: MyModel
        |-- tests
            |-- test_models.py
文件test_models.py中的

我以这种方式导入MyModel

from models import MyModel

如果以这种方式导入问题,问题就解决了:

from myapp.models import MyModel

希望这有帮助!

PS:也许这有点晚了,但我没有在其他人的答案中找到如何在我的代码中解决这个问题,我想分享我的解决方案。

答案 18 :(得分:1)

当我尝试为单个应用生成迁移时遇到此错误,该应用由于git合并而导致存在格式错误的迁移。 e.g。

manage.py makemigrations myapp

当我删除它的迁移然后运行:

manage.py makemigrations

未发生错误,并且成功生成了迁移。

答案 19 :(得分:0)

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

Django似乎有一些奇怪的代码,在许多不同的情况下都可能会失败!

答案 20 :(得分:0)

我今天也遇到了这个错误。 该消息引用了 INSTALLED_APPS 我的应用的某些特定应用。但实际上,它与此特定的应用程序无关。我使用了一个新的虚拟环境,却忘记安装一些本项目中使用的库。在我安装了其他库之后,它开始工作了。

答案 21 :(得分:0)

我今天尝试运行Django测试时遇到此错误,因为我在其中一个文件中使用了简写from .models import *语法。问题是我的文件结构是这样的:

    apps/
      myapp/
        models/
          __init__.py
          foo.py
          bar.py

models/__init__.py中,我使用速记语法导入模型:

    from .foo import *
    from .bar import *

在我的应用程序中,我正在导入如下模型:

    from myapp.models import Foo, Bar

这在运行Django model doesn't declare an explicit app_label时导致了./manage.py test

要解决此问题,我必须从models/__init__.py中的完整路径中显式导入:

    from myapp.models.foo import *
    from myapp.models.bar import *

解决了错误。

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

答案 22 :(得分:0)

在我的情况下,这是因为我在项目级别的 urls.py INSTALLED_APPSapps.py中使用了相对模块路径,而不是植根于项目中根。即绝对模块路径,而不是相对模块路径+ hacks。

无论我对应用程序中的INSTALLED_APPSapps.py中的路径有多大的困扰,我都无法同时使用runserverpytest直到全部三个其中的根植于项目根目录。

文件夹结构:

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

通过以下操作,我可以在wsgi上运行manage.py runserver和gunicorn并使用portal应用视图,而ModuleNotFoundError: No module named 'apps'的pytest会出错,尽管DJANGO_SETTINGS_MODULE的配置正确

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

将config / settings.py中的应用程序引用更改为biz_portal.apps.portal.apps.PortalConfig,将PortalConfig.name更改为biz_portal.apps.portal可以运行pytest(我还没有针对portal视图的测试),但runserver会出错

  

RuntimeError:模型类apps.portal.models.Business未声明显式的app_label,并且不在INSTALLED_APPS中的应用程序中

最后,我摸索着apps.portal,以查看仍在使用相对路径的内容,并发现config / urls.py也应使用biz_portal.apps.portal.urls

答案 23 :(得分:0)

我在PyCharm中遇到此错误,并意识到我的设置文件根本没有被导入。没有明显的错误告诉我,但是当我在settings.py中放入一些废话代码时,并没有引起错误。

我在 local_settings 文件夹中包含 settings.py 。但是,我希望在同一文件夹中包含 __ init __。py 以便导入。添加空白 __ init __。py 对我来说就是一个问题。

答案 24 :(得分:0)

O ... M ... G 我也遇到了这个错误,我花了将近2天的时间,现在终于设法解决了。老实说...错误与问题所在无关。 就我而言,这只是语法问题。我试图独立运行一个在django上下文中使用某些django模型的python模块,但是该模块本身不是django模型。但是我宣布班级错误

而不是拥有

class Scrapper:
    name = ""
    main_link= ""
    ...

我在做

class Scrapper(Website):
    name = ""
    main_link= ""
    ...

这显然是错误的。该消息是如此令人误解,以至于我忍不住想,但认为这是配置方面的问题,或者只是以错误的方式使用django,因为我对此很陌生。

我将在这里与新手分享,因为我经历同样的愚蠢可以有望解决他们的问题。

答案 25 :(得分:0)

很可能你有依赖导入

在我的例子中,我在我的模型中使用了序列化程序类作为参数,并且序列化程序类使用了这个模型: serializer_class = AccountSerializer

from ..api.serializers import AccountSerializer

class Account(AbstractBaseUser):
    serializer_class = AccountSerializer
    ...

在&#34;序列化器&#34;文件:

from ..models import Account

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = (
            'id', 'email', 'date_created', 'date_modified',
            'firstname', 'lastname', 'password', 'confirm_password')
    ...

答案 26 :(得分:0)

我将SECRET_KEY从环境变量中拉出来后忘记在运行应用程序时设置它时收到此错误。如果您在settings.py

中有类似内容
SECRET_KEY = os.getenv('SECRET_KEY')

然后确保您实际上是在设置环境变量。

答案 27 :(得分:0)

还要检查您的迁移是否正常工作

Python3 manage.py makemigrations
Python3 manage.py migrate

答案 28 :(得分:0)

就我而言,settings.py 中的 BASE_DIR 存在问题 这是包的结构:

project_root_directory
└── service_package
    └── db_package
        ├── my_django_package
        │       └── my_django_package
        │          ├── settings.py
        │          └── ...
        └── my_django_app
               ├── migrations
               ├── models.py
               └── ...

它在更新 settings.py 时起作用:

INSTALLED_APPS = [
    'some_django_stuff_here...',
    'some_django_stuff_here....',
    ...
    'service_package.db_package.my_django_app'
]

和指向项目根目录的 BASE_DIR

BASE_DIR = Path(__file__).resolve().parent.parent.parent.parent.parent

在调试中运行 django 后出现这个问题,在 registry.py 中设置断点 -> def get_包含_app_config(self, object_name)

答案 29 :(得分:0)

就我而言,我在 describe("Trouble with iterables => ", () => { // db.tables is received as an array it("tables property is an array", () => { const db = Database(Table(Song), Table(Playlist)); expect(Array.isArray(db.tables)).toBe(true); expect(typeof db.tables[0]).toBe("object"); }); // for..of iterates over the array correctly and extracts the "name" prop it("for ... of returns the names of the tables correctly", () => { const db = Database(Table(Song), Table(Playlist)); expect(db.tableNamesWithForOf).toHaveLength(2); expect(db.tableNamesWithForOf).toContain("Song"); expect(db.tableNamesWithForOf).toContain("Playlist"); }); // shockingly, forEach doesn't iterate at all and returns `undefined`! it("forEach returns the names of the tables correctly", () => { const db = Database(Table(Song), Table(Playlist)); expect(db.tableNames).toHaveLength(2); expect(db.tableNames).toContain("Song"); expect(db.tableNames).toContain("Playlist"); }); }); 中尝试了相同的导入。外壳被更新的数据库搞砸了。我的意思是,我忘记在更新数据库后重新启动我的 shell。

为了解决这个问题,我不得不通过以下命令停止 shell:

javascript

然后通过以下命令重新启动shell:

typescript

希望这能帮助像我这样的人。

答案 30 :(得分:-1)

问题在于:

  1. 您已经对模型文件进行了修改,但尚未将其添加到数据库中,但是您正在尝试运行Python manage.py runserver。

  2. 运行Python manage.py makemigrations

  3. Python manage.py migration

  4. 现在使用Python manage.py runserver,一切都很好。