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

Django如何接收ManyToManyField输入并在Postman测试接口?

问题解决方法

后端代码调整

你当前的ModuleSerializer中rooms字段设置了read_only=True,序列化器不会接收客户端传入的rooms参数,只会在返回数据时序列化该字段,首先需要调整序列化器逻辑:

class ModuleSerializer(serializers.ModelSerializer):
    # 原有只读字段,用于接口返回时序列化房间详情
    rooms = RoomSerializer(read_only=True, many=True)
    # 新增可写字段,用于接收传入的房间ID列表,仅写入不返回
    room_ids = serializers.ListField(
        child=serializers.IntegerField(),
        write_only=True,
        required=True # 若允许创建模块时不传房间,可改为False
    )

    class Meta:
        model = Module
        fields = "__all__"

    # 可选:添加参数校验,避免传入不存在的房间ID
    def validate_room_ids(self, value):
        exist_room_ids = Rooms.objects.filter(room_id__in=value).values_list('room_id', flat=True)
        if len(exist_room_ids) != len(value):
            raise serializers.ValidationError("包含无效的房间ID")
        return value

    def create(self, validated_data):
        # 取出room_ids参数,不传入Module实例的创建逻辑
        room_ids = validated_data.pop('room_ids')
        # 先创建Module对象
        module = super().create(validated_data)
        # 批量关联房间
        module.rooms.add(*room_ids)
        return module

接下来调整视图中的语法错误即可,无需额外修改逻辑:

class add_module(APIView):
    def post(self, request, format=None):
        module_serializer = ModuleSerializer(data=request.data)
        if module_serializer.is_valid():
            module = module_serializer.save()
            return Response(module.module_id, status = status.HTTP_201_CREATED)
        # 修正原Response的字典语法错误
        return Response({"response": module_serializer.errors}, status = status.HTTP_400_BAD_REQUEST)

Postman测试方法

方式1:JSON格式传参(推荐)

  1. 请求方式选择POST,填入对应的接口地址
  2. 切换到Body标签,选择raw,右侧格式选择JSON
  3. 输入请求体示例如下,room_ids数组内填需要关联的房间主键room_id即可:
{
  "title": "测试模块",
  "desc": "模块描述内容",
  "is_deleted": false,
  "room_ids": [1,2,3]
}

方式2:form-data格式传参

  1. 切换到Body标签,选择form-data
  2. 按照如下规则填写参数,数组类型参数通过键名加下标的方式传多个值:
键名值
title测试模块
desc模块描述内容
is_deletedfalse
room_ids[0]1
room_ids[1]2
room_ids[2]3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:57:02