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

问题描述 投票:45回答:4

我正在使用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',
]

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

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

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

为什么我会收到此错误,如何解决此问题以迁移我的项目?谢谢!

django django-rest-framework django-rest-auth
4个回答
120
投票

修复

只需将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为了正常运作。许多其他第三方库可以安全地处理多个站点可能存在的情况,因此可能是最好的。


10
投票

我通过谷歌搜索登陆这篇文章。我的问题是运行的测试爆炸了错误:

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

HTH


2
投票

我得到了上面的错误。但是我的问题是在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',
]

1
投票

只需将'django.contrib.sites',添加到INSTALLED_APPS并在SITE_ID = 1文件中设置settings.py即可。

© www.soinside.com 2019 - 2024. All rights reserved.