加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python Django RestFramework路由触发器

发布时间:2020-12-20 13:52:19 所属栏目:Python 来源:网络整理
导读:我正在使用 python 2.7和django 1.7构建API,我遇到了一个问题.我不是Rest Framework的专家,但我理解基本机制. 举个例子,我可以恢复我的问题.我有一条路可以说 /api/project/ Django Rest Framework为我提供了此路由的所有基本操作,我不需要编写它们,例如: P
我正在使用 python 2.7和django 1.7构建API,我遇到了一个问题.我不是Rest Framework的专家,但我理解基本机制.

举个例子,我可以恢复我的问题.我有一条路可以说

/api/project/

Django Rest Framework为我提供了此路由的所有基本操作,我不需要编写它们,例如:

POST,GET,PUT,DELETE => /api/project/

事实是,我想在创建一个新项目时做一些操作.我想添加创建新项目的用户的id.

我想在create函数中添加一些触发/回调:

class ProjectViewSet(viewsets.ModelViewSet):
    queryset = Project.objects.all()
    serializer_class = ProjectSerializer

    def create(self,request,*args,**kwargs):

我想保留Rest Framework的内部行为(我不想重写路由函数),但我希望路由做额外的事情,我需要触发/回调中的请求对象.就像是

def callback(request,instance):
    instance.created_by = request.user
    instance.save()

你有什么想法?

谢谢.

解决方法

您需要将creator_id字段添加到序列化程序以及资源表示的模型.然后你可以在你的视图中做这样的事情: –

import copy

class ProjectViewSet(viewsets.ModelViewSet):

      ...

      def create(self,**kwargs):
          data = copy.deepcopy(request.data)
          data['creator_id'] = request.user.id
          request._data = data

          return super(ProjectViewSet,self).create(request,**kwargs)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读