原因是爲什麼一個ViewSet
類與路由器工作是一個GenericViewSet
其中有一個ViewSetMixin
在一個基地。
ViewSetMixin
倍率as_view()
方法,使得它需要執行的HTTP方法的結合對資源和路由器可以建立一個地圖爲行動的方法的動作的actions
關鍵字。
您可以通過簡單的解決它補充說,在混入一類基地:
from rest_framework.viewsets import ViewSetMixin
class CarList(ViewSetMixin, generics.ListCreateAPIView)
....
但目前尚不清楚解決方案,因爲ListCreateAPIView
和ModelViewSet
它只是一個空班,在基地一堆混入的。所以你總是可以用你需要的方法建立你自己的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
注意同一混入ListModelMixin
和CreateModelMixin
存在GenericViewSet
和GenericAPIView
唯一的區別。
GenericAPIView
使用方法名稱並調用其中的操作。 GenericViewSet
改爲使用操作並將它們映射到方法。
這裏ViewSet
與方法,你需要:
class ListCreateViewSet(mixins.ListModelMixin,
mixins.CreateModelMixin,
GenericViewSet):
queryset_class = ..
serializer_class = ..
現在它將會與路由器工作,如果你需要一個特殊的行爲,您可以覆蓋list
和create
方法。
你有沒有找到這個解決方案? – 2017-02-16 21:42:02