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

Django Rest Framework嵌套序列化器不生效问题求助

问题分析与解决方案

你的核心问题在于序列化时传入了错误的模型实例,导致反向关联的updated字段无法被正确序列化出来。让我一步步帮你梳理并解决:

1. 核心错误:序列化实例不匹配

在你的MappingSinglePhoto视图中,你查询的是UpdationImages的对象,然后尝试用RecievingImagesSerializer去序列化这些UpdationImages实例——但RecievingImagesSerializer是为RecievingImages模型设计的,updated字段是RecievingImages到UpdationImages的反向关联(通过related_name='updated'定义),只有序列化RecievingImages实例时,这个字段才会被正确填充。

2. 修正步骤

步骤1:修复序列化器的字段定义

首先你的RecievingImagesSerializer里有一个语法错误:rawImage没有加引号,fields列表需要的是字符串类型的字段名,否则会触发变量未定义的错误:

# serializer.py
class RecievingImagesSerializer(serializers.ModelSerializer):
    updated = UpdatedImageSerializer(many=True, read_only=True)
    class Meta:
        model = RecievingImages
        # 修正:rawImage添加引号
        fields = ('updated','name','area','number','agency_name', 'rawImage')

步骤2:修正视图逻辑,传入正确的实例

你需要先获取对应的RecievingImages对象,再用RecievingImagesSerializer序列化它,这样反向关联的updated字段就会自动包含所有关联的UpdationImages数据:

# views.py
from rest_framework import status

class MappingSinglePhoto(APIView):
    """ Mapping Single Image """
    def post(self, request):
        try:
            data = request.data
            name_of_image = data['name']
            # 获取对应的RecievingImages实例,而非UpdationImages
            receiving_image = RecievingImages.objects.get(name=name_of_image)
            serializer = RecievingImagesSerializer(instance=receiving_image)
            return Response(serializer.data)
        except RecievingImages.DoesNotExist:
            return Response({"error": "Target image not found"}, status=status.HTTP_404_NOT_FOUND)
        except Exception as e:
            print(e)
            return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

3. 为什么depth=1能工作?

当你设置depth=1时,DRF会自动递归序列化所有关联对象,即使你传入的实例不对(不过其实这时候可能是巧合),但这种方式会返回关联对象的所有字段,不符合你的需求。而正确的嵌套序列化可以精确控制返回的字段,这也是你想要的方式。

验证

现在当你发送请求时,serializer.data里就会包含updated字段,它是一个数组,每个元素都是符合UpdatedImageSerializer定义的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:57:31