使用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装饰器的使用!
使用DRF视图集时自定义action方法的更多相关文章
- 对drf视图集的理解
		视图集ViewSet 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ... 
- 068.Python框架Django之DRF视图集使用
		一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ... 
- DRF视图集的路由设置
		在使用DRF视图集时,往往需要配一大堆路由,例如: # views.py class DepartmentViewSet(ListModelMixin,CreateModelMixin,Retriev ... 
- DRF视图集的使用
		# 原创,转载请留言联系 如果要把同一种http请求方法的多个接口放在同一个视图中,比如:查询多条数据和一条数据都是get请求,放在同一个视图里,应该怎么做呢??? 如果直接放在一起,会怎样呢? # ... 
- Distinct删除重复数据时 自定义的方法比较【转】
		最近项目中在用Linq Distinct想要将重复的资料去除时,发现它跟Any之类的方法有点不太一样,不能很直觉的在呼叫时直接带入重复数据判断的处理逻辑,所以当我们要用某个成员属性做重复数据的判断时, ... 
- day73:drf:drf视图相关类&路由Routers&创建虚拟环境
		目录 1.APIView 2.GenericAPIView:通用视图类 3.5个视图扩展类:ListModelMixin,CreateModelMixin,RetrieveModelMixin,Upd ... 
- 二: drf视图
		Django REST framwork 提供的视图的主要作用: 控制序列化器的执行(检验.保存.转换数据) 控制数据库查询的执行 一:请求与响应 1:request Request 1 REST f ... 
- drf04 drf视图类
		REST framework 提供了众多的通用视图基类与扩展类,以简化视图的编写. 1.2个视图基类 1.1. APIView rest_framework.views.APIView APIView ... 
- DRF中的视图集的使用
		1.说明:DRF框架中的视图集: 在drf开发接口中,使用GenericAPIView和视图扩展类结合起来完成接口功能是一件很常见的事情,所以,drf的作者帮我们提前把 GenericAPIView ... 
随机推荐
- winform  控件半透明设置
			1.backcolor属性为color.FromArgb(100, 220, 220, 220); 2.全透明设置为transparent方法. 
- asp.net页面中的Console.WriteLine结果如何查看
			其实用Console.WriteLine("xxxxx"),在asp.net Web程序,在输出窗口是不会输出结果的,应该用Debug.WriteLine("xxxxx& ... 
- 正则匹配java多行注释
			类似: /** * This method was generated by MyBatis Generator. * This method returns the value of the dat ... 
- ssh问题_1
			昨天配置了虚拟机的ssh,可以相互连接,但是今天早上就不行了,遇到如下错误 [slave1@hadoop ~]$ scp .ssh/id_rsa.pub master@hadoop.master:~/ ... 
- C# Lambda表达式使用累加器例子
			using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Lamb ... 
- [剑指Offer] 42.和为S的两个数字
			题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. [思 ... 
- [洛谷P4124][CQOI2016]手机号码
			题目大意:给你两个$l,r$,求出$[l,r]$中符合要求的数,要求为至少有$3$个相邻的相同数字,且不可以同时出现$8$和$4$ 题解:数位$DP$ 卡点:无 C++ Code: #include ... 
- 【BZOJ 2744 朋友圈】
			Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1570 Solved: 532[Submit][Status][Discuss] Descripti ... 
- readelf用法小记
			By francis_hao Feb 14,2017 显示ELF文件的信息 用法概述 readelf和objdump类似,不过,readelf会显示更详细的信息,而且独立于BFD库,因此当BFD ... 
- linux 服务器下入侵之后的日志清理
			1.web日志的清理:access.log 和auth.log 位置在/var/log/下面. 2.系统日志存放在:/root/.bash_history 
