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

Django REST Framework能否直接使用Serializer类而非继承?序列化空值问题

问题1:在Django REST Framework中,是否可以直接使用Serializer类而非继承该类?

当然不行啦!DRF里的serializers.Serializer是个基类,它本身并没有定义任何要处理的字段——你得继承它,然后在子类里声明对应的数据字段(比如EmailField、CharField这些),序列化器才知道要去处理对象的哪些属性。直接用基类的话,它根本不知道该序列化什么,自然没法正常工作。

问题2:为什么直接用serializers.Serializer(comment).data得到空字典?怎么解决?

这和第一个问题的原因其实是一样的——你直接实例化了基类Serializer,但这个基类里没有定义任何字段,所以它不知道要从comment对象里提取哪些数据,返回空字典就很正常啦。

解决方法很简单,你需要继承Serializer来定义自己的序列化器类,把要处理的字段都声明出来:

from datetime import datetime
from rest_framework import serializers

class Comment(object):
    def __init__(self, email, content, created=None):
        self.email = email
        self.content = content
        self.created = created or datetime.now()

# 自定义序列化器类,继承Serializer并声明字段
class CommentSerializer(serializers.Serializer):
    email = serializers.EmailField()
    content = serializers.CharField()
    created = serializers.DateTimeField()

# 现在用这个自定义序列化器来处理对象就没问题了
comment = Comment(email='leila@example.com', content='foo bar')
serializer = CommentSerializer(comment)
print(serializer.data)
# 输出会是类似:{'email': 'leila@example.com', 'content': 'foo bar', 'created': '2024-05-20T12:34:56.789012'}

这样序列化器就明确知道要处理comment的哪几个属性,就能正确输出序列化后的Python数据啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:52:23