RuntimeError:模型类 django.contrib.sites.models.Site 未声明显式 app_label 且不在 INSTALLED_APPS 中的应用程序中
Posted
技术标签:
【中文标题】RuntimeError:模型类 django.contrib.sites.models.Site 未声明显式 app_label 且不在 INSTALLED_APPS 中的应用程序中【英文标题】:RuntimeError: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS 【发布时间】:2016-05-25 03:20:57 【问题描述】:我正在使用 Django Rest Framework 和 AngularJs 构建应用程序。我使用 Django-rest-auth 进行身份验证,但我无法设置它。无论如何,我正在尝试用我的项目设置这个app。我意识到我需要安装 django-rest-auth-registration 才能让它运行,所以我按照documentation 做了以下事情:
我运行了命令
pip install django-rest-auth
和
pip install django-allauth
我的任何 settings.py 看起来像这样:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 3rd party apps
'rest_framework',
'rest_framework.authtoken',
'rest_auth',
'allauth',
'allauth.account',
'rest_auth.registration',
# My app
'myapp',
]
我还添加了身份验证后端、上下文处理器和正确的 url。
但是,当我尝试迁移时,我的终端会抛出以下错误:
RuntimeError:模型类 django.contrib.sites.models.Site 没有 声明一个显式的 app_label 并且不在应用程序中 INSTALLED_APPS。
为什么会出现此错误,如何解决此错误以迁移我的项目?谢谢!
【问题讨论】:
这能回答你的问题吗? Django model "doesn't declare an explicit app_label" 我发现问题源于未在settings.py
中为新创建的应用程序包含应用程序定义。将'<app>.apps.<AppConfig>'
添加到INSTALLED_APPS
后,Django 就知道它是一个注册的应用程序。
【参考方案1】:
我安装了 django 调试工具栏,这实际上导致了/我的问题。 INSTALLED_APPS(在 settings.py 中)需要条目 'django.contrib.sessions'。确保添加后运行迁移。
【讨论】:
【参考方案2】:尝试在模型元类中添加app_label = 'yourApp'
:
class Meta:
app_label = 'yourApp'
【讨论】:
我的只显示一个不同的错误`RuntimeError: Conflicting 'uploadedcsvfile' models in application 'odin':yourApp
名称,UploadedCSVFile 是模型名称。你会碰巧知道为什么吗?只需将'django.contrib.sites',
添加到INSTALLED_APPS
并在您的settings.py
文件中设置SITE_ID = 1
。
【讨论】:
添加 django.contrib.sites 对我有用,谢谢【参考方案4】:我通过 Google 搜索找到了这篇文章。我的问题是运行测试时出现错误:
RuntimeError: Model class app.taxonomy.models.Term doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
这是在 Python 2.7.x 上运行的,具有绝对导入。正如 Colton Hicks 在下面的 cmets 中提到的,这也可能发生在 Python 3 中(pytest 3.2.3 和 Django 1.11.4)。
在我的tests.py
:
from __future__ import absolute_import
[...]
from .models import Demographics, Term
将相对导入更改为绝对导入后,问题就消失了:
from taxonomy.models import Demographics, Term
HTH
【讨论】:
遇到了类似的问题,但运行的是 Python3。在我的tests.py 文件中,我使用了我想测试from .views import LatestAccount
的视图的相对导入。我得到的错误甚至不是 tests.py 文件中使用的模型。然而,删除该相对导入并用绝对导入替换它可以解决问题。
@ColtonHicks 发生这种情况的测试运行器是什么;我会将您的 python3 发现修改为我的答案。
我在 django 1.11.4 应用程序中使用 pytest 3.2.3。【参考方案5】:
我得到了上面的错误。但是我的问题是在 urls.py 中。我在关注 PyDanny cookiecutter django 食谱。我的错误是在 urls.py 中加入这一行:
url(r'^demo/', include('project.demoapp.urls', namespace='demoapp')),
当我更正这一点时:
url(r'^demo/', include('demoapp.urls', namespace='demoapp')),
一切都很好。我还更改了本地应用程序(我首先这样做了,因此严重错误是 url 配置错误):
LOCAL_APPS = [
# Your stuff: custom apps go here
'demoapp.apps.DemoAppConfig',
]
【讨论】:
【参考方案6】:修复
只需将 Django 的 Sites framework 添加到您的应用中,并在您的设置中将 SITE_ID 设置为 1。
INSTALLED_APPS = [
...
'django.contrib.sites',
]
SITE_ID = 1
为什么会这样?
Django's Sites Framework 是一个与核心库捆绑在一起的贡献模块,它允许将单个 Django 应用程序/代码库用于不同的站点(可以使用不同的数据库、视图中的逻辑等)。 SITE_ID setting,如文档中所述,“用于使应用程序数据可以连接到特定站点,并且单个数据库可以管理多个站点的内容。”
在这种特殊情况下,AllAuth requires the Sites Framework 才能正常运行。许多其他第三方库是为了安全处理可能存在多个站点的情况而构建的,因此可能是最好的。
【讨论】:
它解决了问题,但它来自哪里? Django's Sites Framework 是一个与核心库捆绑在一起的贡献模块,它允许将单个 Django 应用程序/代码库用于不同的站点(可以使用不同的数据库、视图中的逻辑等)。在这种特殊情况下,AllAuth requires the Sites Framework 以正常运行(与许多其他第三方库一样,旨在安全处理可能存在多个站点的情况)。 2018 年你不再需要 SITE_ID,但我有这个问题 尽管有 'django.contrib.sites' 和 SITE_ID = 1,我仍然有这个问题。 检查回溯,您将看到哪个 3rd 方应用程序正在尝试使用 django.contrib.sites。在我的例子中是 userena。以上是关于RuntimeError:模型类 django.contrib.sites.models.Site 未声明显式 app_label 且不在 INSTALLED_APPS 中的应用程序中的主要内容,如果未能解决你的问题,请参考以下文章
RuntimeError:模型类 xxx.xxx 未声明显式 app_label 且不在 INSTALLED_APPS 中的应用程序中
RuntimeError:模型类 myapp.models.class 未声明显式 app_label 并且不在 INSTALLED_APPS 中的应用程序中
RuntimeError:模型类 django.contrib.sites.models.Site 未声明显式 app_label 且不在 INSTALLED_APPS 中的应用程序中
PyTorch:RuntimeError:输入、输出和索引必须在当前设备上
RuntimeError:CUDA 错误:触发了设备端断言 - BART 模型
PyTorch 模型训练:RuntimeError:cuDNN 错误:CUDNN_STATUS_INTERNAL_ERROR