运行时错误:模型类没有声明明确的app_label,并且不在Django OAuth Toolkit的INSTALLED_APPS应用程序中。

3

我希望可以访问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类中,但这并没有起作用。


1
你的 Django 版本是什么?如果你正在使用 这个包,请注意它最后更新于5年前,可能与最新的 Django 版本不兼容。 - Ralf
1
特别是在Django 2.0中开始对app_label进行更改可能会破坏旧应用程序。请阅读有关https://code.djangoproject.com/ticket/28691和相关票证的更多信息。 - Ralf
我正在使用Django 2.1,也许你是对的,这可能是一个不兼容性问题。 - Amon
我的错!实际上我正在使用这个包:https://github.com/jazzband/django-oauth-toolkit,它与django 2.0兼容。 - Amon
nvm 仍然无法工作。 - Amon
显示剩余2条评论
1个回答

1
如果您查看django-oauth2-provider文档(我假设这是正确的库;由于在您的问题中没有找到链接,因此我不得不猜测),它说:

Add OAuth2 Provider to INSTALLED_APPS

INSTALLED_APPS = (
    # ...
    'provider',
    'provider.oauth2',
)
但是我注意到你在问题中的代码有些不同:
'oauth2_provider',
'oauth2_provider.models.Application',

你尝试过文档中建议的方法吗?对你有用吗?


嘿,谢谢你的回复,我已经添加了那些内容,但仍然没有成功! - Amon
1
@CharlesSmith 为了明确起见:您是只添加了这两个新应用程序名称,还是也删除了您之前有的那两个应用程序名称?因为我认为您需要删除您之前有的两个名称。 - Ralf
我也已经将它们移除了。 - Amon
1
@CharlesSmith 错误信息还是之前的吗? - Ralf
the message is the same! - Amon
它说我尝试导入的类不在已安装的应用程序中,这个问题可能是由于它不是我的项目的一部分而是外部库引起的吗? - Amon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接