【问题标题】:Django model "doesn't declare an explicit app_label"Django 模型“没有声明显式的 app_label”
【发布时间】:2017-03-05 12:45:10
【问题描述】:

我无计可施。经过十几个小时的故障排除,可能更多,我以为我终于可以做生意了,但后来我得到了:

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'

【问题讨论】:

  • 您在 INSTALLED_APPS 中没有 django.contrib.contenttypes。
  • 那么另一个可能的情况是你在加载它的模型之前导入了它,是不是某些在 INSTALLED_APPS 中的 contenttypes 之前列出的应用程序正在使用它?
  • 这很不寻常,你根本没有自己的项目或应用程序?
  • 所有有 models.py 的东西都应该在 INSTALLED_APPS 中;如果其中一个使用 contenttype(例如,因为通用外键),那么它需要位于列表中的 contenttypes 下。
  • 令人沮丧,它可能是非常小的东西,但很难从这里分辨出哪里。您是否在 settings.py 中导入任何东西?

标签: python django python-3.x


【解决方案1】:

就我而言,我在manage.py shell 中尝试了相同的导入。外壳被更新的数据库弄乱了。我的意思是,我在更新数据库后忘记重新启动我的 shell。

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

>>> exit()

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

$ python3 manage.py shell

希望这会对像我这样的人有所帮助。

【讨论】:

  • 我正在使用 pycharm 的 shell,但没有任何工作正常。使用 django 的 shell 修复了映射问题。
【解决方案2】:

这里的答案都没有解决我的问题,而将我们带到这里的错误消息对我来说是一个红鲱鱼 - 但我确实找到了解决方案。

对我来说,问题的真正原因是:

  • Django 尝试注册应用程序
  • 在应用注册期间出现一些异常(根本原因)
  • 异常处理工具中的某些东西会在某处拉入模型
  • 该模型存在于尚未注册的应用中(因为请记住,应用注册已被上述根本原因异常破坏)
  • 最后,作为死亡前的最后一幕,Django 吐出了将我们所有人带到这里的(红鲱鱼)抱怨 - 即SomeModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

我需要向上滚动并阅读 first 错误消息,而不是关心这个错误(即把我们带到这里的错误)。

这对您来说可能看起来不一样,它可能是破坏应用注册的任何东西。对我来说,根本原因是:

Traceback (most recent call last):
[...SNIP...]                                                                                                                                                                                      
  File "/Users/user/.pyenv/versions/appName_py3/lib/python3.7/site-packages/django/__init__.py", line 24, in setup                   
    apps.populate(settings.INSTALLED_APPS)                                                                                         
  File "/Users/user/.pyenv/versions/appName_py3/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate 
    app_config.import_models()                                                                                                       
[... SNIP ...]                                                                                                    
  File "/Users/user/app_name/api/models/models.py", line 1122, in <module>              
    class SomeObject(models.Model):                                                                                     
  File "/Users/user/dev_alt/app_name/api/models/models.py", line 1134, in SomeObject
    some_property = models.ForeignKey(SomeOtherObject, null=True, blank=True)                         
TypeError: __init__() missing 1 required positional argument: 'on_delete'   

[...SNIP...]
During handling of the above exception, another exception occurred:

<RED HERRING STACK TRACE THAT BROUGHT US ALL HERE>

同样,“根本原因”问题对您来说可能不同 - 但对我来说:我正在将旧版 Django 应用程序从 1.11.x 升级到 3.2.x。在此过程中,Django 进行了一项破坏向后兼容性的更改,要求模型上的所有 ForeignKeyOneToOne 属性都有一个 on_delete 参数。

我为应用程序中的 200 多个违规案例添加了此论点,我的根本原因问题和 doesn't declare an explicit app_label 问题均已解决。

【讨论】:

    猜你喜欢
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2018-10-19
    • 2020-06-17
    • 2018-01-03
    • 2021-10-09
    • 1970-01-01
    相关资源
    最近更新 更多