运行时错误:模型类django.contrib.sites.models.Site没有声明一个显式的app_label,并且不在INSTALLED_APPS的应用程序中

qij5mzcb  于 2022-12-01  发布在  Go
关注(0)|答案(8)|浏览(170)

我正在用Django Rest Framework和AngularJs构建一个应用程序。我使用Django-rest-auth来进行身份验证,尽管我还没有设置它。无论如何,我正在尝试用我的项目设置这个app。我意识到我需要安装django-rest-auth-registration来运行它,所以我按照这个documentation做了以下事情:
我运行了命令
pip安装django-rest-auth

pip安装django-allauth
我的任何设置。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。
但是,当我尝试迁移时,我的终端抛出以下错误:
运行时错误:模型类django.contrib.sites.models.site没有声明一个显式的app_label,也不在INSTALLED_APPS的应用程序中。
为什么我会遇到这个错误,我如何解决它来迁移我的项目?谢谢!

balp4ylt

balp4ylt1#

"修复“
只需将Django的Sites framework添加到您的应用中,并在设置中将SITE_ID设置为1。

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

SITE_ID = 1

"为什么会这样“
Django's Sites Framework是一个与核心库捆绑在一起的贡献模块,它允许在不同的站点(可以使用不同的数据库,视图中的逻辑等)使用单个Django应用程序/代码库。SITE_ID设置,如文档中所述,“* 用于使应用程序数据可以挂钩到特定的站点,并且单个数据库可以管理多个站点的内容 *”
在这个特殊的例子中,为了正常工作,AllAuth requires the Sites Framework。许多其他的第三方库被建立来安全地处理可能存在多个站点的情况,这样可能是最好的。

u5i3ibmn

u5i3ibmn2#

我通过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上发生(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

高温

41zrol4v

41zrol4v3#

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

class Meta:

    app_label = 'yourApp'
k2arahey

k2arahey4#

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

ogq8wdun5#

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

eoxn13cs

eoxn13cs6#

我已经安装了django调试工具栏,这实际上是导致/my问题的原因。INSTALLED_APPS(在www.example.com中settings.py)需要条目“django.contrib. sessions”。请确保在添加后运行migrate。

kq4fsx7k

kq4fsx7k7#

Django的升级答案〉=4.0 // 2022

将Django的Sites框架和FlatPages框架添加到INSTALLED_APPS中,并在设置中设置SITE_ID。

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

]

SITE_ID = 1
  • 你的测试应该很有效 *
k4emjkb1

k4emjkb18#

进行迁移后,一切都按预期运行
pythonmanage.py迁移
祝你好运

相关问题