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


在我們用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裝飾器的使用!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM