gpt4 book ai didi

django - 将 ListCreateAPIView 类添加到路由器

转载 作者:行者123 更新时间:2023-12-04 12:20:16 26 4
gpt4 key购买 nike

如何将 ListCreateAPIView 添加到路由器 url?

通常我喜欢:

router = routers.DefaultRouter()
router.register(r'busses', BusViewSet)

但现在我有:
class CarList(generics.ListCreateAPIView): ...

我现在将它添加到 urlpatterns 中:
urlpatterns = patterns('', 
url(r'^carts/', CarList.as_view(model=Car), name='cars'),

我想将这个 Cars-view(如果我手动调用 url,它会按预期工作!)添加到路由器,所以它在概述页面中!

所以:它按原样工作,但我必须手动输入 url,它不在 API 的概述页面中。

最佳答案

原因是为什么一个 ViewSet类与路由器一起工作是 GenericViewSet其中有一个 ViewSetMixin在一个基地。ViewSetMixin覆盖 as_view()方法,以便它需要一个 actions将 HTTP 方法绑定(bind)到资源和路由器上的操作的关键字可以为操作方法构建映射。
您可以通过在类库中简单地添加该 mixin 来解决它:

from rest_framework.viewsets import ViewSetMixin

class CarList(ViewSetMixin, generics.ListCreateAPIView)
....

但是还不清楚解决方案,因为 ListCreateAPIViewModelViewSet它只是一个空类,在一个基础中有一堆混入。所以你总是可以建立你自己的 ViewSet用你需要的方法。
比如这里的代码 ListCreateAPIView :
class ListCreateAPIView(mixins.ListModelMixin,
mixins.CreateModelMixin,
GenericAPIView):

def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)

def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)

这里是 ModelViewSet :
class ModelViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):

pass

注意相同的 mixins ListModelMixinCreateModelMixin GenericViewSet 中只有区别和 GenericAPIView . GenericAPIView使用方法名称并在其中调用操作。 GenericViewSet而是使用 Action 并将它们映射到方法。
这里 ViewSet使用您需要的方法:
class ListCreateViewSet(mixins.ListModelMixin,
mixins.CreateModelMixin,
GenericViewSet):

queryset_class = ..
serializer_class = ..

现在它将与路由器一起使用,您可以覆盖 listcreate如果您需要特殊行为,请使用方法。

关于django - 将 ListCreateAPIView 类添加到路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28472317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com