使用DRF視圖集時自定義action方法
阿新 • • 發佈:2018-11-11
request 代碼 ont .py 設置 spa esp ews 沒有
在我們用DRF視圖集完成了查找全部部門,創建一個新的部門,查找一個部門,修改一個部門,刪除一個部門的功能後,views.py的代碼是這樣子的:
class DepartmentViewSet(ModelViewSet): queryset = Department.objects.all() serializer_class = DepartmentSerializer
現在需要新增一個功能,查詢最新成立的部門。
這時,我們就需要自定義action方法了。
新增功能後的代碼如下:
class DepartmentViewSet(ModelViewSet): queryset= Department.objects.all() serializer_class = DepartmentSerializer def lastest(self,request): """查看最新成立的部門""" dep = Department.objects.latest("create_date") serializer = self.get_serializer(instance=dep) return Response(serializer.data)
但是,還有一個問題,在視圖集的路由設置裏,本來用了DRF提供的router快捷地完成了視圖的設置。但是增加的這個自定義方法,因為他的特殊性,生成的url地址並沒有它。那麽應該怎麽辦呢?
這時就需要使用rest_framework.decorators.action
裝飾器給自定義的方法進行裝飾,裝飾後它就能自動生成了。
增加多一行代碼,最後變成:
class DepartmentViewSet(ModelViewSet): queryset = Department.objects.all() serializer_class = DepartmentSerializer @action(methods=[‘get‘],detail=False) # detail=False表示不需要匹配主鍵的正則,函數不需要傳入主鍵就設為False deflastest(self,request): """查看最新成立的部門""" dep = Department.objects.latest("create_date") serializer = self.get_serializer(instance=dep) return Response(serializer.data)
註意action裝飾器的使用!
使用DRF視圖集時自定義action方法