RuntimeError:模型类django.contrib.sites.models.Site不声明显式的app_label,并且不在INSTALLED_APPS

时间:2016-02-14 05:20:23

标签: django django-rest-framework django-rest-auth

我正在使用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。

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

5 个答案:

答案 0 :(得分:116)

修复

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

答案 1 :(得分:10)

我通过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

HTH

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

class Meta:

    app_label = 'yourApp'