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

  • 相关阅读:
    shell 字符串替换
    shell 拆分字符串成数组 放入数组
    shell 换行输出变量 换行
    Linux shell修改xml文件
    Spark 实现共同好友
    Hive 开启 service2 服务
    hive 求相互是好友.
    Linux 查看外网ip
    Termux下开启kex远程桌面
    Termux开启ssh服务
  • 原文地址:https://www.cnblogs.com/chichung/p/9942603.html
Copyright © 2011-2022 走看看