我很难在另一个APIView中重新使用来自现有APIView的get
调用
我有一个基于类的DRF视图:
# in urls.py
path('api/something', views.SomethingList.as_view()),
path('api/similarsomething', views.SomethingList.as_view()), #legacy url
# in views.py
class SomethingList(generics.ListCreateAPIView):
queryset = Something.objects.all()
serializer_class = SomethingSerializer
# override get, because of some required custom action
def get(self, request, *args, **kwargs):
# do some custom actions (scan folder on filesystem)
...
return super().get(request, *args, **kwargs)
上述视图都提供了get
(列表)和post
(创建)API接口。如预期的那样。我用DRF惊人的信息(此处未显示)对其进行了扩充,以生成我的招摇过市文档
现在,我定义了另一个(遗留)URL,它应该与上面的get(list)调用完全相同。目前,这个遗留url还指向SomethingList
。
但是旧式URL不应该提供post(create)接口,我想使用drf在swagger中将其标记为“已弃用”。所以我想我需要一个单独的类来限制get()并添加@extend_schema
装饰器
因此,我考虑如下重新使用现有的SomethingList.get
功能:
# in urls.py
path('api/something', views.SomethingList.as_view()),
path('api/similarsomething', views.SimilarSomethingList.as_view()), # ! points to new class
# in views.py
class SomethingList(generics.ListCreateAPIView):
...
class SimilarSomethingList(generics.ListAPIView): #ListAPIView only!
@extend_schema(summary="Deprecated and other info..")
def get(self, request, *args, **kwargs):
view = SomethingList.as_view()
return view.get(request, *args, **kwargs)
然而,这不起作用。我得到AttributeError: 'function' object has no attribute 'get'
我尝试了几个变体,但也无法实现
问题:
如何从另一个APIView重用get()
调用?应该很简单,所以我可能忽略了一些显而易见的事情
将
http_method_names
设置为类视图参考:https://stackoverflow.com/a/31451101/13022138
相关问题 更多 >
编程相关推荐