1. 程式人生 > >使用DRF視圖集時自定義action方法

使用DRF視圖集時自定義action方法

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
    def
lastest(self,request): """查看最新成立的部門""" dep = Department.objects.latest("create_date") serializer = self.get_serializer(instance=dep) return Response(serializer.data)

註意action裝飾器的使用!

使用DRF視圖集時自定義action方法