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

如何序列化Django两张嵌套关联表,实现POST请求返回完整提交数据

修复方案

你的代码存在两处核心问题:一是序列化器返回字段名不符合预期,二是视图逻辑重复创建Album实例且最终序列化的是请求数据而非实际入库的关联数据。以下是完整修改代码:

1. 序列化器(serializers.py)修改

class AlbumImagesSerializer(serializers.ModelSerializer):
    class Meta:
        model = AlbumImages
        fields = ["media"] # 只返回需要的media字段,过滤多余的id、外键字段

class AlbumSerializer(serializers.ModelSerializer):
    # 把模型关联的albumimages字段别名改为media,匹配你需要的返回字段名
    media = AlbumImagesSerializer(many=True, read_only=True, source="albumimages")

    class Meta:
        model = Album
        fields = ["name", "media"]

2. 视图(views.py)修改

@api_view(['POST'])
def addAlbum(request):
    if request.method == 'POST':
        media_files = request.data.get('media', [])
        # 先校验是否上传了图片
        if not media_files:
            return Response("Please upload the files", status=status.HTTP_400_BAD_REQUEST)
        
        serializer = AlbumSerializer(data=request.data)
        # 先校验参数合法再操作数据库,避免生成脏数据
        if serializer.is_valid():
            # 用序列化器创建Album实例,不要重复手动创建
            album_instance = serializer.save()
            # 批量创建关联的图片记录
            for file in media_files:
                AlbumImages.objects.create(media=file, album=album_instance)
            # 用已经关联了图片的实际入库实例重新序列化,就能拿到完整的返回数据
            res_serializer = AlbumSerializer(album_instance)
            return Response(res_serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    return Response("Not found", status=status.HTTP_404_NOT_FOUND)

修改说明

  • 模型文件无需任何修改,原有外键关联和related_name配置正常可用
  • 调整了参数校验顺序,避免参数校验失败还生成无效Album记录的问题
  • 去掉了重复创建Album的逻辑,避免数据库生成多余的脏数据
  • 最终返回的序列化结果基于实际入库的、已经关联了所有图片的Album实例,会自动带出所有关联的图片数据,返回格式完全符合需求:
{
  "name": "My favourite songs list",
  "media": [
    {"media": "filename1"},
    {"media": "filename2"}
  ]
}

注:你之前给出的预期返回格式存在JSON语法错误,同一个对象内不允许有重复的key,修正后的返回为上述符合JSON规范的格式,满足实际使用需求


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:57:01