django restframework 序列化高级用法指定序列化哪些字段
自定义序列化哪些字段
为什么需要这个功能呢,因为在工作中遇到了,不同的接口,需要返回的数据有很多都是相同的,只有个别几个字段数据不一样,那么解决方法如下
方法一,直接写不同的多个序列化器然后进行序列化,这个方法虽然说可以实现,但是需要些很多重复的代码,很不优雅。
具体步骤省略(重点不在这个上面)
方法二,把多个序列化器整合到一个序列化器中,因为他们都要很多共同的字段需要序列化,那么直接把他们都写在一个序列化中,然后再使用序列化器的时候,告诉他我们要序列化的字段,那么就可以实现一个序列化器,可以根据不同需求返回不同的数据,从而实现代码的优化。下面是具体步骤
步骤一首先就是再序列化器中重写init方法,
因为再正常的序列化器中,他是不能直接使用fields参数的,所以需要我们自己进行重写再序列化的的时候最重要的就是self.fields这个属性,这个属性是序列化器中所写的所有字段。所有对他进行修改即可实现我们想要的效果。
源码分析
class TestSerializer(serializers.ModelSerializer): def __init__(self, *args, **kwargs): fields = kwargs.pop('fields', None) super().__init__(*args, **kwargs) if fields: allowed = set(fields) existing = set(self.fields.keys()) for field_name in existing - allowed: self.fields.pop(field_name) """攻击防御动态序列化类""" time = serializers.DateTimeField(source='create_time') class Meta: model = Test fields = ['time', 'id', 'username']
#使用方式 TestSerializer(instance,fields=['time']).data #输出的结果就只会有 #('time', '2023-07-24 21:34:01')
本文作者:clever-cat
本文链接:https://www.cnblogs.com/clever-cat/p/17582651.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步