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
相关产品推荐
相关产品推荐

