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

如何基于DRF实现接收组件ID列表并返回对应数据的API?

解决方案

1. 编写序列化器

组件数据序列化器

用于将Component模型实例转换为前端需要的JSON格式:

from rest_framework import serializers
from .models import Component

class ComponentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Component
        fields = ['id', 'name', 'price']

请求体验证序列化器

负责校验前端传入的ID数组格式合法性:

class ComponentIdsSerializer(serializers.Serializer):
    compIds = serializers.ListField(
        child=serializers.IntegerField(min_value=1)
    )

2. 编写视图集

自定义ViewSet处理批量查询的POST请求:

from rest_framework import viewsets, status
from rest_framework.response import Response
from .models import Component
from .serializers import ComponentSerializer, ComponentIdsSerializer

class ComponentBatchViewSet(viewsets.GenericViewSet):
    serializer_class = ComponentIdsSerializer
    queryset = Component.objects.all()

    def create(self, request, *args, **kwargs):
        # 验证请求数据格式
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        
        # 获取合法的ID列表
        comp_ids = serializer.validated_data['compIds']
        
        # 批量查询对应组件
        components = Component.objects.filter(id__in=comp_ids)
        
        # 序列化查询结果并返回
        response_serializer = ComponentSerializer(components, many=True)
        return Response(response_serializer.data, status=status.HTTP_200_OK)

3. 配置路由

在项目的urls.py中添加路由配置:

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import ComponentBatchViewSet

router = DefaultRouter()
router.register(r'components/batch', ComponentBatchViewSet, basename='component-batch')

urlpatterns = [
    path('', include(router.urls)),
]

关键说明

  • 用id__in进行批量查询,比循环单查性能更优
  • 请求体序列化器确保传入的compIds是正整数组成的列表,拦截无效请求
  • 响应直接返回符合预期格式的组件数据列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:22:35