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

使用serpy序列化Django模型JSONField返回空字典问题求助

解决serpy序列化Django JSONField(字典列表)返回空字典的问题

问题出在serpy.DictSerializer的使用场景上:它是用来序列化带属性的对象(比如Django模型实例),而非纯Python字典。当你传入字典列表时,它会尝试访问字典的属性(如dict.name),但字典是通过键访问的,因此找不到任何可序列化的属性,最终返回空字典。

下面提供两种可行的解决方案:

方案1:针对固定结构的字典列表,自定义序列化器

如果contents中的每个字典结构固定(比如都包含name、value等键),可以为单个字典定义专属序列化器:

# 单个内容项的序列化器,根据实际字段调整
class ContentItemSerializer(serpy.Serializer):
    name = serpy.StrField()
    value = serpy.IntField()

class SectionSerializer(serpy.Serializer):
    title = serpy.StrField()
    item_count = serpy.IntField()
    data = serpy.MethodField()

    def get_data(self, obj):
        # 用自定义序列化器处理列表,many=True表示序列化多个项
        return ContentItemSerializer(obj.contents, many=True).data

方案2:结构不固定时直接返回原始数据

如果contents的字典结构不固定,不需要做字段过滤,直接返回JSONField存储的原始数据即可,无需通过serpy二次序列化:

class SectionSerializer(serpy.Serializer):
    title = serpy.StrField()
    item_count = serpy.IntField()
    # 直接映射contents字段到data
    data = serpy.Field(source='contents')

或者用MethodField处理(适合需要额外逻辑的场景,比如空值处理):

class SectionSerializer(serpy.Serializer):
    title = serpy.StrField()
    item_count = serpy.IntField()
    data = serpy.MethodField()

    def get_data(self, obj):
        # 处理可能的null值,返回空列表替代
        return obj.contents or []

这样就能正确序列化contents中的字典列表,不会再返回空字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:24:56