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

  • 相关阅读:
    springboot + swagger的实体类属性注解
    Idea破解办法+idea免费生成注册码+jsp属性选择器+注解什么的都报错
    springboot笔记(一)
    docker-compose 安装
    Spring cloud 分布式锁
    Mybait 快速生成Java POJO文件 及数据库Mapping文件。
    Git 提交所有文件
    Docker dockerfile-maven-plugin 使用
    Docker remote api 开启
    Linux git 关联 github仓库
  • 原文地址:https://www.cnblogs.com/chichung/p/9942603.html
Copyright © 2020-2023  润新知