99

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

我运行了命令

pip install 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 中的应用程序中。

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

4

6 回答 6

254

修复

只需将 Django 的站点框架添加到您的应用程序中,并在您的设置中将 SITE_ID 设置为 1。

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

SITE_ID = 1

为什么会这样?

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

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

于 2016-02-14T06:58:33.430 回答
8

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

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 中(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

高温高压

于 2017-01-17T18:18:52.037 回答
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',
]
于 2017-07-04T12:37:56.010 回答
2

只需添加'django.contrib.sites',INSTALLED_APPS设置SITE_ID = 1在您的settings.py文件中。

于 2019-01-18T09:06:09.237 回答
1

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

class Meta:

    app_label = 'yourApp'
于 2020-06-12T17:45:40.203 回答
0

我安装了 django调试工具栏,这实际上导致了/我的问题。INSTALLED_APPS(在 settings.py 中)需要条目 'django.contrib.sessions'。添加后确保运行迁移。

于 2021-10-18T13:54:43.097 回答