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

dar*_*rse 54 django django-rest-framework django-rest-auth

我正在使用Django Rest Framework和AngularJs构建一个应用程序.我使用Django-rest-auth进行身份验证,但是,我无法进行设置.无论如何,我试图用我的项目设置这个应用程序.我意识到我需要安装django-rest-auth-registration才能让它运行,所以我按照这个文档做了以下事情:

我跑了命令

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',
]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Ian*_*ice 137

修复

只需将Django的Sites框架添加到您的应用程序中,并在您的设置中将SITE_ID设置为1即可.

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

SITE_ID = 1
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

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

在这种特殊情况下,AllAuth需要站点框架才能正常运行.许多其他第三方库的构建是为了安全地处理可能存在多个站点的情况,因此可能是最好的.

  • 尽管有“django.contrib.sites”和SITE_ID = 1,我仍然遇到这个问题。 (4认同)

ber*_*rto 10

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

RuntimeError: Model class app.taxonomy.models.Term doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
Run Code Online (Sandbox Code Playgroud)

这是在带有绝对导入的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
Run Code Online (Sandbox Code Playgroud)

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

from taxonomy.models import Demographics, Term
Run Code Online (Sandbox Code Playgroud)

HTH