码迷,mamicode.com
首页 > 其他好文 > 详细

使用DRF视图集时自定义action方法

时间:2018-11-11 17:20:28      阅读:629      评论:0      收藏:0      [点我收藏+]

标签:art   cti   应该   查找   false   地址   函数   font   sel   

在我们用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方法

标签:art   cti   应该   查找   false   地址   函数   font   sel   

原文地址:https://www.cnblogs.com/chichung/p/9942603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!