You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django POST接口如何仅返回创建资源的requestid而非完整对象?

实现方法

你可以通过重写CreateAPIView的create方法来定制返回内容,以下两种方案都能实现需求:

方案一:手动控制对象创建与响应构造

重写create和perform_create方法,完成对象创建后直接构造仅包含requestid的响应:

from rest_framework import generics
from rest_framework.response import Response
from .models import requestTable
from .serializers import RequestSerializer

class CreateRequestView(generics.CreateAPIView):
    queryset = requestTable.objects.all()
    serializer_class = RequestSerializer

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        # 获取创建后的实例
        instance = self.perform_create(serializer)
        # 返回自定义响应
        return Response({"requestid": instance.requestid})

    def perform_create(self, serializer):
        # 重写此方法返回创建的实例(父类默认不返回)
        return serializer.save()

方案二:复用父类逻辑后修改响应数据

直接调用父类的create方法完成创建,再修改响应数据只保留requestid:

from rest_framework import generics
from rest_framework.response import Response
from .models import requestTable
from .serializers import RequestSerializer

class CreateRequestView(generics.CreateAPIView):
    queryset = requestTable.objects.all()
    serializer_class = RequestSerializer

    def create(self, request, *args, **kwargs):
        # 复用父类的创建逻辑
        response = super().create(request, *args, **kwargs)
        # 替换响应数据为仅包含requestid的结构
        response.data = {"requestid": response.data["requestid"]}
        return response

方案对比

  • 方案一适合需要在对象创建前后添加额外业务逻辑的场景,控制更灵活
  • 方案二代码更简洁,适合仅需修改返回字段的简单场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:35:21