zoukankan      html  css  js  c++  java
  • 使用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装饰器的使用!

  • 相关阅读:
    prepareSlideshow函数
    moveElement函数与positionMessage函数
    function styleElementSiblings函数与 addClass函数
    stribeTables函数与highlightRows函数
    确定股票见底的六大信号
    调整期六招教你猎杀未来牛股
    王者-甄别同一板块强弱股的方法【真假美猴王】
    王者--分时图五要素教你抓涨停板股票
    王者-【注册制将利好哪些股票】
    王者--看盘口特点猎杀强庄股
  • 原文地址:https://www.cnblogs.com/chichung/p/9942603.html
Copyright © 2011-2022 走看看