我正在使用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。
为什么我会收到此错误,如何解决此问题以迁移我的项目?谢谢!
答案 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'