RuntimeError:模型类django.contrib.sites.models.Site未声明显式的app_label且不在INSTALLED_APPS中的应用程序中


77

我正在使用Django Rest Framework和AngularJs构建应用程序。我使用Django-rest-auth进行身份验证,但是我无法对其进行设置。无论如何,我正尝试在我的项目中设置此应用。我意识到我需要安装django-rest-auth-registration来使其运行,所以我按照此文档进行了以下操作:

我运行了命令

pip安装django-rest-auth

点安装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',
]

我还添加了身份验证后端,context_processors和正确的URL。

但是,当我尝试迁移时,终端抛出以下错误:

RuntimeError:模型类django.contrib.sites.models.Site未声明显式的app_label,也不在INSTALLED_APPS的应用程序中。

为什么会出现此错误,以及如何解决该错误以迁移项目?谢谢!


这回答了你的问题了吗?Django的模式“不声明明确app_label”
Qumber

Answers:


199

解决方法

只需将Django的Sites框架添加到您的应用中,然后在设置中将SITE_ID设置为1即可。

INSTALLED_APPS = [
    ...
    'django.contrib.sites',
]

SITE_ID = 1

为什么会这样?

Django的Sites Framework是与核心库捆绑在一起的一个贡献模块,该模块允许将单个Django应用程序/代码库与不同的站点一起使用(可以在视图中使用不同的数据库,逻辑等)。如文档中所述,SITE_ID设置用于使应用程序数据可以挂接到特定站点,并且单个数据库可以管理多个站点的内容。”

在这种特殊情况下,AllAuth需要Sites Framework才能正常运行。建立了许多其他第三方库来安全处理可能存在多个站点的情况,因此可能是最好的。


1
它可以解决问题,但它是从哪里来的呢?
erikbwork '16

1
Django的Sites Framework是与核心库捆绑在一起的一个功能模块,它允许在不同的站点(可以在视图中使用不同的数据库,逻辑等)中使用单个Django应用程序/代码库。在这种特殊情况下,AllAuth需要Sites Framework才能正常运行(许多其他第三方库也是如此,它们是为安全处理可能存在多个站点的情况而构建的)。
伊恩·普赖斯

在2018年,您不再需要SITE_ID,但是我有这个问题
holms

尽管具有“ django.contrib.sites”和SITE_ID = 1,但我仍然遇到这个问题。
罗斯·西蒙兹

11

我通过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)在下面的评论中提到的那样,这在Python 3(与Django 1.11.4并用pytest 3.2.3)中也可能发生。

在我的tests.py

from __future__ import absolute_import
[...]
from .models import Demographics, Term

将相对导入更改为绝对导入后,问题消失了:

from taxonomy.models import Demographics, Term

高温超导


发生了类似的问题,但是正在运行Python3。在我的tests.py文件中,我使用了要测试的视图的相对导入from .views import LatestAccount。我遇到的错误甚至没有用于tests.py文件中的模型。但是删除该相对导入并用绝对导入替换它可以解决此问题。
科尔顿·希克斯

@ColtonHicks发生了什么测试?我将您的python3发现修改为我的答案。
berto

我在django 1.11.4应用程序中使用pytest 3.2.3。
科尔顿·希克斯

3

我收到上面的错误。但是我的问题是在urls.py中。我遵循PyDanny cookiecutter django食谱。我的错误是将urls.py放在这一行:

    url(r'^demo/', include('project.demoapp.urls', namespace='demoapp')),

当我改正这个:

    url(r'^demo/', include('demoapp.urls', namespace='demoapp')),

一切都好。我还更改了本地应用程序(我首先这样做,所以关键错误是网址配置错误):

LOCAL_APPS = [
    # Your stuff: custom apps go here
    'demoapp.apps.DemoAppConfig',
]


1

尝试添加 app_label = 'yourApp'在模型Meta类中添加:

class Meta:

    app_label = 'yourApp'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.