如何修复Django中的“AttributeError at /api/doc 'AutoSchema' object has no attribute 'get_link'”错误

62
我们正在互联网上练习 REST API 的例子。
然而,出现了以下错误。
我在这个链接中尝试了一种方法,但情况并没有改变。 为什么Swagger会在Django上引发不明确的错误
from django.contrib import admin
from django.conf.urls import url, include
from rest_framework import routers
from rest_framework_swagger.views import get_swagger_view

import consumer.api

app_name = 'consumer'

router = routers.DefaultRouter()
router.register('consumers', consumer.api.ConsumerViewSet)

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/doc', get_swagger_view(title='Rest API Document')),
    url(r'^api/v1/', include((router.urls, 'consumer'), namespace='api')),
]
Exception Type: AttributeError at /api/doc
Exception Value: 'AutoSchema' object has no attribute 'get_link'

你能提供一下那个例子的链接吗? - Toni Sredanović
16
django-rest-swagger不再得到维护,他们建议切换到drf-yasg - Iain Shelvington
请发布您的视图集类,可能存在错误。 - Thismatters
请注意,drf-yasg似乎也不再维护(自2020年2月以来)。请参考https://github.com/axnsan12/drf-yasg/issues/641。 - bhatiaravi
2个回答

153

我尝试了以下方法,在Settings.py中添加,它对我有效。

REST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema' }

7
核心API架构生成已被弃用,现在您可以按照此快速入门指南生成一个OpenAPI架构:https://www.django-rest-framework.org/community/3.10-announcement/ - vctrd
1
@vctrd 这应该是一个单独的答案或包含在这个答案中。 - Code-Apprentice

6

正如@vctrd所提到的,这个错误可能是由于自DRF 3.10起,CoreAPI支持已被弃用,取而代之的是OpenAPI:

自Django REST Framework 3.5首次引入模式支持以来, OpenAPI已成为建模Web API的广泛采用标准。

此版本开始了基于CoreAPI的模式生成的弃用过程,并引入了OpenAPI模式生成。

您仍将能够继续使用CoreAPI模式、API文档和客户端,直至可预见的未来。我们将努力确保CoreAPI模式生成器作为第三方软件包仍然可用,即使它最终从REST框架中删除,计划在版本3.12中实现此操作。

因此,如果您使用OpenAPI而不是Core API,在最近的DRF版本中生成API模式似乎更加方便。 DRF OpenAPI模式生成的文档可在以下位置找到:https://www.django-rest-framework.org/api-guide/schemas/ 但是,如果由于任何原因希望使用Core API,则@Omkar的答案将是解决方案。

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