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

DRF嵌套序列化器返回空字典,为何改用StringRelatedField可正常返回?

问题原因分析及解决方案

出现这种情况通常是以下几个原因导致的:

1. DesignationSerializer未正确配置序列化字段

这是最常见的原因。如果你的DesignationSerializer没有指定要序列化的字段(或者指定了空的字段列表),序列化器会返回空字典。比如错误写法:

class DesignationSerializer(serializers.ModelSerializer):
    class Meta:
        model = DesignationModal
        fields = ()  # 空字段列表导致序列化后返回空字典

而StringRelatedField不依赖Serializer的字段配置,它直接调用关联模型的__str__方法返回字符串,因此能正常显示内容。

解决方法:在DesignationSerializer的Meta类中明确指定需要序列化的字段,例如:

class DesignationSerializer(serializers.ModelSerializer):
    class Meta:
        model = DesignationModal
        fields = ('id', 'name')  # 替换为你需要的模型字段

2. 关联对象未被正确加载(懒加载问题)

如果查询User数据时没有预取关联的Designation,可能会导致序列化器无法获取关联对象的属性(虽然StringRelatedField也需要访问关联对象,但它仅调用__str__,部分场景下可能触发懒加载查询)。

解决方法:查询User时使用select_related预取关联数据,例如:

users = UserModal.objects.select_related('designation').all()

3. DesignationSerializer的Meta类未指定正确模型

如果DesignationSerializer的Meta类写错了模型名称,或者未指定model参数,序列化器无法识别要序列化的模型结构,也会返回空字典。

检查并修正:

class DesignationSerializer(serializers.ModelSerializer):
    class Meta:
        model = DesignationModal  # 确保此处是正确的模型类
        fields = ('name',)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:20:33