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/ ...
随机推荐
- UMD、CommonJS、ES Module、AMD、CMD模块的写法
AMD异步模块规范 RequireJS就是AMD的一个典型的实现. 以下是一个只依赖与jQuery的模块代码: // foo.js define(['jquery'], function($){ // ...
- gitconfig别名配置
vim ~/.gitconfig 进行配置 [user] name = Your Name email = you@yourdomain.example.com [core] editor = vim ...
- #C++初学记录(N皇后#回溯递归)
<font size=5 face"微软雅黑">N皇后Problem Description <font size=4 face"微软雅黑"& ...
- 英语语法 - 介词on/in/at与时间
介词滥用是中国学生的普遍缺点,主要是在语言学习的阶段没有人指正,形成有效的反馈,后面进入社会,就算别人发现你错了,也不会指正你,导致你一错再错. 看一篇教程,讲得不错.
- Navicat Premium连接MySQL 1251错误
Navicat Premium连接MySQL 1251错误 MySQL Installer 8.0.17 出现上述错误的原因是版本MySQL 8.0.17即8.0开始的MySQL版本,因为采用新的 ...
- form表单文件上传提交且接口回调显示提交成功
前端: <form method="post" enctype="multipart/form-data" id="formSubmit&quo ...
- mediacoder固定质量CRF
视频编码:crf 与 bitrate 对照表 CRF(constant rate factor)就是x264/x265下压制视频的一种恒定量化值的编码方式,码率不恒定.其实就相当于vbr1pass.采 ...
- vue报错:There are multiple modules with names that only differ in casing.
今天写项目时,遇到报错信息如下: 经过多次排除及参考网上文章,最后找到问题所在 排查原因:1 .在引用组件时,路径大小写不对也会造成此报错,看例子:错误写法: 正确写法: 2.在组件使用vuex时,引 ...
- 005 文档API
1.索引API 下面的请求把JSON对象添加到school索引,_doc映射下. 关于POST请求,如果存在索引,则更新:如果不存在,则添加. POST school/_doc/1 { "n ...
- winform使用委托和事件在窗体之间传值
定义委托和事件,并且触发这个事件 //定义委托 public delegate void ShowOutStockDelegate(List<OutStockResultDto> outS ...