【问题标题】:RuntimeError: Model class doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS for Django OAuth ToolkitRuntimeError:模型类未声明显式 app_label 并且不在 INSTALLED_APPS 中的应用程序中用于 Django OAuth Toolkit
【发布时间】:2019-06-26 22:58:14
【问题描述】:

我想访问 Django OAUTH Toolkit 使用的模型,以便定期从数据库中删除旧令牌。我以为我只是导入它们:

from oauth2_provider.management.commands.cleartokens import Command
from oauth2_provider.models import AccessToken
Command.handle()

但是,当我尝试在命令行中运行此文件时,我收到以下错误:

Traceback (most recent call last):
  File ".\db_cleanup.py", line 5, in <module>
    from oauth2_provider.models import AccessToken
  File "C:\Users\User\.virtualenvs\gsm-django\lib\site-packages\oauth2_provider\models.py", line 178, in <module>
    class Application(AbstractApplication):
  File "C:\Users\User\.virtualenvs\gsm-django\lib\site-packages\django\db\models\base.py", line 95, in __new__
    "INSTALLED_APPS." % (module, name)
RuntimeError: Model class oauth2_provider.models.Application doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

我也尝试在我的设置文件中将oauth2_provider.models.Application 添加到我已安装的应用程序中,但无济于事:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'api',
    'oauth2_provider',
    'oauth2_provider.models.Application',
    'rest_framework',
    'rest_framework.authtoken',
    'graphene_django',
    'corsheaders',
]

我也将app_label 添加到它提到的Application 类中,但这也不起作用。

【问题讨论】:

  • 您的Django 版本是什么?如果您使用的是this package,请注意它的最后一次更新是在 5 年前,可能与最新的Django 版本不兼容。
  • 特别是从Django 2.0 开始对app_label 的更改可能会破坏旧应用程序。阅读更多关于 code.djangoproject.com/ticket/28691 和相关票证的信息。
  • 我使用的是 Django 2.1,也许你是对的,这是一个不兼容的问题
  • 我的错!我实际上正在使用这个包:github.com/jazzband/django-oauth-toolkit 与 django 2.0 兼容
  • 我想我可能已经找到了问题所在,我正在使用 IntelliJ,当我在 IntelliJ 中从控制台运行文件时出现错误:pkg_resources.ContextualVersionConflict: (Django 1.11.16 (c:\users\user\appdata\local\programs\python\python36\lib\site-packages), Requirement.parse('django&gt;=2.0'), {'django-oauth-toolkit'}) 似乎 django 在 IntelliJ 中已过时或其他什么.与我从 CLI 运行它时相反

标签: python django oauth-2.0


【解决方案1】:

如果您查看django-oauth2-provider docs(我认为这是正确的库;我不得不猜测,因为我没有在您的问题中找到链接),它在那里说:

将 OAuth2 提供程序添加到 INSTALLED_APPS

INSTALLED_APPS = (
    # ...
    'provider',
    'provider.oauth2',
)

但我注意到问题中的代码还有其他内容:

'oauth2_provider',
'oauth2_provider.models.Application',

您是否尝试过文档的建议?这对你有用吗?

【讨论】:

  • 您好,感谢您的回复,我添加了这些但仍然没有成功!
  • @CharlesSmith 只是为了明确一点:您是刚刚添加了这 2 个新的应用程序名称,还是还删除了您在那里拥有的 2 个应用程序名称?因为我认为您需要删除那里的 2 个名称。
  • 我也删除了它们
  • @CharlesSmith 错误信息现在还是一样还是不一样?
  • 消息是一样的!
猜你喜欢
  • 2023-02-18
  • 2020-08-13
  • 2018-12-29
  • 2019-08-28
  • 2016-05-25
  • 2020-05-16
  • 2017-09-05
  • 2018-01-03
  • 1970-01-01
相关资源
最近更新 更多