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

最新文章

  1. GPG终极指南(加密/签名)
  2. 培训第五天---JS
  3. ExtJs知识点概述
  4. openssl下载
  5. PLSQL_解析过程及硬解析和软解析的区别(案例)
  6. System.Runtime.InteropServices.COMException (0x800706BA) 解决方法
  7. 64位系统下注册32位dll文件
  8. Cortex依赖管理
  9. jq-animate实现返回顶部效果
  10. HttpClient4.5 post请求xml到服务器
  11. c语言第五次作业--函数
  12. jQuery中常用的函数方法总结
  13. CentOS7.3上部署简单的网站(Tomcat)
  14. RE模块垃圾回收机制
  15. ASP.NET Zero--前端应用程序
  16. DeepCTR专题:Neural Factorization Machines 论文学习和实现及感悟
  17. alpha冲刺5/10
  18. Python 练习:简单的购物车(二)
  19. 深入理解Node.js基于事件驱动的回调
  20. 【python009--循环】

热门文章

  1. [leetcode-644-Maximum Average Subarray II]
  2. 功能规格说明书Version2
  3. 基本数据类型的成员变量放在jvm的哪块内存区域里?
  4. UnrealEngine4入门(一) 新建一个c++项目
  5. winform 控件大小随着窗体自适应
  6. IP数据报格式 及分组转发算法
  7. Android 实现异步加载图片
  8. underscore的bind和bindAll方法
  9. 给DOM元素绑定click事件也有学问
  10. Linux上 Can't connect to X11 window server using XX as the value of the DISPLAY 错误解决方法