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

  • 相关阅读:
    TensorFlow设置GPU占用量
    与服务器同步工程(expect脚本)
    C/C++中#pragma once的使用
    sublime text 3 快捷键大全
    Sublime Text 3 注册码
    如何用diff比较两个文件夹下的内容
    Error in building opencv with ffmpeg
    opencv: Rotate image by 90, 180 or 270 degrees
    初识HTTPS
    Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用
  • 原文地址:https://www.cnblogs.com/chichung/p/9942603.html
Copyright © 2011-2022 走看看