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装饰器的使用!

  • 相关阅读:
    练习5
    图例设置了却不显示
    easyui中多级表头,主表头不能添加field字段,否则不居中
    springboot热部署
    ReactDom.render调用后没有渲染
    webpack打包配置模板
    overridePendingTransition
    multiDex分包时指定主dex的class列表
    android实现手势锁
    动态补丁构建工具nuwa中的“坑”
  • 原文地址:https://www.cnblogs.com/chichung/p/9942603.html
Copyright © 2011-2022 走看看