【问题标题】:Python Django RestFramework route triggerPython Django Rest Framework 路由器触发器
【发布时间】:2015-08-19 12:09:25
【问题描述】:

我正在使用 python 2.7 和 django 1.7 构建 API,但遇到了问题。我不是 Rest Framework 方面的专家,但我了解基本机制。

我可以通过给你一个例子来恢复我的问题。我有一条路线可以说

/api/project/

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

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

事实上,我想在新建项目的时候做一些操作。我想添加创建新项目的用户的 id。

我想在创建函数中添加某种触发器/回调:

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()

你有什么想法吗?

谢谢。

【问题讨论】:

  • 你的意思是 request.user?
  • 我需要 request.user 和创建的对象。我在下面编辑了我的帖子

标签: python django django-rest-framework


【解决方案1】:

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

import copy

class ProjectViewSet(viewsets.ModelViewSet):

      ...

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

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

【讨论】:

  • 您好,感谢您抽出宝贵时间,我马上测试一下
猜你喜欢
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 2020-10-07
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多