DjangoRestful 递归嵌套序列化器实现
****
由于博客园不支持markdown语法,所以推荐以下链接阅读:
原创 https://blog.csdn.net/weixin_42495873/article/details/89433542
# Django嵌套递归序列化器实现
**最近在做自己的项目,需要返回评论表相关数据,我的评论表设计的是这样的,父id为空则是等级最高的父评论,然后依次为子、孙子。。。评论信息关联,类似于省市级三级联动,不过这个评论表的深度可以更深**

### 1.刚开始采取的是序列化器嵌套
1.序列化器嵌套就简单多了,只不过就是层数比较多,然后后面都是重复的,下面是我刚开始的重复的序列化器嵌套

2.优点是简单,但是缺点就是**评论深度不太高,而且代码也太冗余了**。
3.虽然简单完成了,就去完善前端代码了,前端写着写着,把评论显示的递归实现了(jquery),所以就想着在完善一下,看看能不能使用序列化递归的方式完成.
### 2.递归序列化器
- 在网上找资料,发现官方提供的有递归序列化器的方式。
- 官方链接在这里[这儿][1],不过可以看到,支持的Django1.8,1.9.2.0 ...,而我用Djnago1.11开发的,所以用不了。。。
- 又开始找资料了。。很高兴找到了类似的..l
- serializers.SerializerMethodField()这个方法好像是指定返回你需要返回的字段信息,不受前面的模型类名影响,更加方便、灵活配合,下面的函数使用.前面指定的字段名要在函数 **get_指定字段名**相同.
- 不过,他返回的父类,而我需要返回的是该外键的**反向引用**,这个父评论多个子评论,所以序列化器加入many=True,然后就ok了,只需要一个序列化器就够了
```python
class Childrens_Conten_Serializer(ModelSerializer):
user = User_Avatar_Url_Serializer()
subs = serializers.SerializerMethodField()
class Meta:
model = Comment
fields =('id','like','subs','content','user')
def get_subs(self, obj):
if obj.subs:
return Childrens_Conten_Serializer(obj.subs,many=True).data
else:
return None
```
- 递归序列化返回的数据,如果有多个层级依旧可以。

完美实现,前端代码就不展示了,感觉写的贼复杂,比较乱。。
- 第一次写博客,markdown用的不太好,是个技术小白,多分享自己遇到的bug和问题吧,还请各位大神指点指点。。。
[1]:https://github.com/heywbj/django-rest-framework-recursive
DjangoRestful 递归嵌套序列化器实现的更多相关文章
- 使用紧凑的序列化器,数倍提升性能 —— ESFramework 4.0 快速上手(11)
在分布式通信系统中,网络传递的是二进制流,而内存中是我们基于对象模型构建的各种各样的对象,当我们需要将一个对象通过网络传递给另一个节点时,首先需要将其序列化为字节流,然后通过网络发送给目标节点,目标节 ...
- DRF中的序列化器
DRF中的序列化器详细应用 视图的功能:说白了就是接收前端请求,进行数据处理 (这里的处理包括:如果前端是GET请求,则构造查询集,将结果返回,这个过程为序列化:如果前端是POST请求,假如要对数 ...
- 模型类序列化器ModelSerializer
定义 比如我们创建一个BookInfoSerializer class BookInfoSerializer(serializers.ModelSerializer): ""&qu ...
- IOSerialize,xml和json,soap序列化器,二进制序列化器,XML序列化器,文件 检查、新增、复制、移动、删除
1 文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件3 三种序列化器4 xml和json1.文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/ ...
- 16-DRF工程搭建与序列化器
1.DRF工程搭建 环境安装与配置 DRF是以Django扩展应用的方式提供的,所以我们可以直接利用Django环境,而无需创建(先创建Django环境). 1.安装DRF pip3 install ...
- DRF框架之Serializer序列化器的序列化操作
在DRF框架中,有两种序列化器,一种是Serializer,另一种是ModelSerializer. 今天,我们就先来学习一下Serializer序列化器. 使用Serializer序列化器的开发步骤 ...
- 序列化器:ModelSerializer
ModelSerializer 类提供了一个快捷方式,可让你基于 Models 自动创建一个 Serializer 类,其中的字段与模型类字段对应. ModelSerializer 类与常规 Seri ...
- 在Wcf中应用ProtoBuf替代默认的序列化器
Google的ProtoBuf序列化器性能的牛逼已经有目共睹了,可以把它应用到Socket通讯,队列,Wcf中,身为dotnet程序员一边期待着不久后Grpc对dotnet core的支持更期待着Wc ...
- NetworkComms V3 使用Json序列化器进行网络通信
刚才在网上闲逛,偶然看到一篇文章 C#(服务器)与Java(客户端)通过Socket传递对象 网址是:http://www.cnblogs.com/iyangyuan/archive/2012/12/ ...
随机推荐
- fluent提供的边界条件解析【转载】
转载自:http://chengkang8.blog.163.com/blog/static/6719535620113149552369/ 1. 速度入口边界条件 用于定义流动入口边界的速度和标量 ...
- 为 Raft 引入 leader lease 机制解决集群脑裂时的 stale read 问题
问题:当 raft group 发生脑裂的情况下,老的 raft leader 可能在一段时间内并不知道新的 leader 已经被选举出来,这时候客户端在老的 leader 上可能会读取出陈旧的数据( ...
- Java学习之"Hello World"
好像学习每个程序敲的第一个代码都是"Hello World",而学习Java也不例外,这篇博客就讲一下我学习Java的第一个程序HelloWorld.java 程序代码: publ ...
- 网络IPC:套接字接口概述
网络IPC:套接字接口概述 套接字接口实现了通过网络连接的不同计算机之间的进程相互通信的机制. 套接字描述符(创建套接字) 套接字是通信端点的抽象,为创建套接字,调用socket函数 #include ...
- 常用的web api总结
1.querySelector 获取指定元素中匹配css选择器的元素. // 作用在document document.querySelector("#nav"); // 获取文档 ...
- elasticsearch使用BulkProcessor批量入库数据
在解决es入库问题上,之前使用过rest方式,经过一段时间的测试发现千万级别的数据会存在10至上百条数据的丢失问题, 在需要保证数据的准确性的场景下,rest方式并不能保证结果的准确性,因此采用了el ...
- flutter PopupMenuButton弹出式菜单列表
import 'package:flutter/material.dart'; class PopupMenuButtonDemo extends StatefulWidget { @override ...
- shell编程系列15--文本处理三剑客之awk格式化输出printf
shell编程系列15--文本处理三剑客之awk格式化输出printf printf的格式说明符 格式符 含义 %s 打印字符串 %d 打印十进制数 %f 打印一个浮点数 %x 打印十六进制数 %o ...
- 使用poi解决导出excel内下拉框枚举项较多的问题
废话少说,直接上代码: package com.fst.attachment.controller; import java.io.FileOutputStream; import org.apach ...
- URL相关的工具类
package com.opslab.util.web; import com.opslab.util.CharUtil;import com.opslab.util.CharsetUtil;impo ...