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
相关产品推荐
相关产品推荐

