使用DRF视图集时自定义action方法
2024-08-26 18:50:29
在我们用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装饰器的使用!
最新文章
- GPG终极指南(加密/签名)
- 培训第五天---JS
- ExtJs知识点概述
- openssl下载
- PLSQL_解析过程及硬解析和软解析的区别(案例)
- System.Runtime.InteropServices.COMException (0x800706BA) 解决方法
- 64位系统下注册32位dll文件
- Cortex依赖管理
- jq-animate实现返回顶部效果
- HttpClient4.5 post请求xml到服务器
- c语言第五次作业--函数
- jQuery中常用的函数方法总结
- CentOS7.3上部署简单的网站(Tomcat)
- RE模块垃圾回收机制
- ASP.NET Zero--前端应用程序
- DeepCTR专题:Neural Factorization Machines 论文学习和实现及感悟
- alpha冲刺5/10
- Python 练习:简单的购物车(二)
- 深入理解Node.js基于事件驱动的回调
- 【python009--循环】
热门文章
- [leetcode-644-Maximum Average Subarray II]
- 功能规格说明书Version2
- 基本数据类型的成员变量放在jvm的哪块内存区域里?
- UnrealEngine4入门(一) 新建一个c++项目
- winform 控件大小随着窗体自适应
- IP数据报格式 及分组转发算法
- Android 实现异步加载图片
- underscore的bind和bindAll方法
- 给DOM元素绑定click事件也有学问
- Linux上 Can't connect to X11 window server using XX as the value of the DISPLAY 错误解决方法