You need to enable JavaScript to run this app. 如何在DRF ModelViewSet的POST请求成功时调用函数并传递数据
优惠活动
大模型
产品
解决方案
定价
更多

如何在DRF ModelViewSet的POST请求成功时调用函数并传递数据

问题解答

1. 调用函数的位置说明

可以在POST请求成功后调用目标函数,你只需要重写ModelViewSet自带的create方法即可,代码写在UpdatedTypeViewSet类内部即可,只有创建成功的请求才会触发函数调用,完全匹配你的需求。

2. 传参方法

你需要先修改Send_The_Result函数新增形参接收数据,调用函数时根据业务需要传入原始请求数据、新创建的模型实例、序列化后的数据都可以。


调整后的完整代码

send_to_redmine.py

# send_to_redmine.py
def Send_The_Result(post_data, created_instance):
    # post_data为本次POST提交的原始请求参数
    # created_instance为本次请求创建成功的Updated_Type模型实例
    # 你可以直接拿这两个参数的内容组装发往redmine的请求
    pass

if __name__ == '__main__':
    # 本地调试自行构造测试参数传入即可
    Send_The_Result(test_data, test_instance)

views.py

# views.py
from rest_framework import status
from rest_framework.response import Response
import schedule_update.send_the_result

class UpdatedTypeViewSet(viewsets.ModelViewSet):
    queryset = Updated_Type.objects.all()
    serializer_class = UpdatedTypeSerializer

    def create(self, request, *args, **kwargs):
        # 原有创建逻辑保留
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        # 创建成功后调用目标函数,传入需要的参数
        schedule_update.send_the_result.Send_The_Result(
            post_data = request.data,
            created_instance = serializer.instance
        )
        # 返回原有响应结果
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

补充说明

  • 你可以根据业务需求只传指定字段给Send_The_Result,不用全量传递请求数据和模型实例
  • 如果函数执行耗时较长不想阻塞接口响应,可以改成异步任务执行

内容的提问来源于stack exchange,提问作者victor chang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 04:54:06