多级评论接口数据的处理方法

多级评论,采用列表嵌套字典,循环字典,自关联字段,循环添加,根据内存地址一致保持数据一致性

from api import models
from rest_framework import serializers


class ListCommentSerializer(serializers.ModelSerializer):
    create_datetime = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S")
    children = serializers.SerializerMethodField()

    class Meta:
        model = models.Comment
        fields = ['create_datetime', 'reply', 'content', 'children']

    def get_children(self, obj):
        # 获取当前根评论的所有的子孙评论(后台)
        descendant_queryset = models.Comment.objects.filter(root=obj).order_by('id')
        descendant_dict = {}
        """
        {
            11:{"reply":2,children:[],"content":"oooadfa","depth":1,"create_datetime":"2021-09-0122:32:22",
            12:{"reply":2,children:[],"content":"oooadfa","depth":1,"create_datetime":"2021-09-0122:32:22"},
            13:{"reply":11,children:[]"content":"gooadfa","depth":2,"create_datetime":"2021-09-01 22:32:22",
            14:{"reply":12,children:[]"content":"oooadfa","depth":2,"create_datetime":"2021-09-0122:32:22"],
            15:{"reply":13,children:[]"content":"gooadfa","depth":3,"create_datetime":"2021-09-01 22:32:22"],
            16:{"reply":15,children:[]"content":"oooadfa","depth":4,"create_datetime":"2021-09-0122:32:22"],
        }
        """
        for descendant in descendant_queryset:
            ser = CreateCommentSerializers(instance=descendant, many=False)  # 构造序列化器
            row = {'children': []}
            row.update(ser.data)
            descendant_dict[descendant.id] = row
        # print(descendant_dict)

        # 根评论obj的1级评论
        children_list = [
              # {"reply": 2, children:[],"content": "oooadfa","depth": 1, "create_datetime": "2021-09-01 22:32:22"},
     
              # {"reply": 2, children:[],"content": "oooadfa","depth": 1, "create_datetime": "2021-09-01 22:32:22"}
              ]
        for cid, item in descendant_dict.items():
            depth = item['depth']  # 获取评论深度
            if depth == 1:  # 将一级评论插入列表,[{'children': [],'reply': 2......],
                children_list.append(item)
                continue
            reply_id = item['reply']  # 获取回复了一级评论的那条评论reply_id,并将该条评论插入到一级评论的children列表中
            descendant_dict[reply_id]['children'].append(item)
        return children_list

本文作者:晚点心动。

本文链接:https://www.cnblogs.com/lucky-tao/p/16642624.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   晚点心动。  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开
  1. 1 小星星 七喜
  2. 2 情深深雨濛濛 杨胖雨
  3. 3 山水之间 许嵩
  4. 4 不潮不用花钱 御小兮
  5. 5 Rage Your Dream m.o.v.e
  6. 6 Disconnected Pegboard Nerds
  7. 7 STAY The Kid LAROI,Justin Bieber
  8. 8 Sunburst Tobu,Itro
  9. 9 迪士尼在逃公主 徐秉龙
  10. 10 赴约 赵乃吉
  11. 11 Tell Me 潘玮柏,徐洁儿
  12. 12 潮汐(抖音DJ版) 涛少君
  13. 13 我只能爱你 彭青
  14. 14 喜欢你 火鸡
  15. 15 失忆 郑十一(郑毅),蔡鹤峰
  16. 16 写不完的温柔 G.E.M.邓紫棋
  17. 17 忽而今夏 就是南方凯阿
  18. 18 老男孩 仲夏夜
  19. 19 2002 J.Fla
  20. 20 ✘ 按 下 暫 停 你 將 變 的 清 醒 且 墮 落 Mei
情深深雨濛濛 - 杨胖雨
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.