django --递归查询评论

表数据

树状结构

python 复制代码
@action(methods=('GET', ), detail=False)
def get_info_pinglun(self, request, *args, **kwargs) -> Response:
    '''
    根据评论id查所有回复
    @params  wenxian_pinglun_id   -->  评论id;
    '''
    wenxian_pinglun_id = self.request.GET.get('wenxian_pinglun_id')
    results = self._recursion_get_reply(wenxian_pinglun_id)

    return Response({
        'code': 0,
        'msg': 'success',
        'results': results
    })

def _recursion_get_reply(self, wenxian_pinglun_id: int):
    '''递归查该评论底下的所有回复'''
    results = []
    queryset = WenxianPinglun.objects.filter(other_pinglun_id=wenxian_pinglun_id) # 获取该评论下所有回复

    for instance in queryset:
        user = User.objects.get(user_id=instance.user_id)
        other = User.objects.get(user_id=instance.other_id)
        results.append({
            'wenxian_pinglun_id': instance.wenxian_pinglun_id,
            'user__img': user.img,
            'user__nicheng': user.nicheng,
            'other__nicheng': other.nicheng,
            'text': instance.text,
            'children': self._recursion_get_reply(instance.wenxian_pinglun_id)
        })
    return results

扁平化处理

python 复制代码
@action(methods=('GET', ), detail=False)
def get_info_pinglun(self, request, *args, **kwargs) -> Response:
    '''
    根据评论id查所有回复
    @params  wenxian_pinglun_id   -->  评论id;
    '''
    wenxian_pinglun_id = self.request.GET.get('wenxian_pinglun_id')
    results = self._recursion_get_reply(wenxian_pinglun_id)

    return Response({
        'code': 0,
        'msg': 'success',
        'results': results
    })

def _recursion_get_reply(self, wenxian_pinglun_id: int):
    '''递归查该评论底下的所有回复'''
    results = []
    queryset = WenxianPinglun.objects.filter(other_pinglun_id=wenxian_pinglun_id) # 获取该评论下所有回复

    for instance in queryset:
        user = User.objects.get(user_id=instance.user_id)
        other = User.objects.get(user_id=instance.other_id)
        results.append({
            'wenxian_pinglun_id': instance.wenxian_pinglun_id,
            'user__img': user.img,
            'user__nicheng': user.nicheng,
            'other__nicheng': other.nicheng,
            'text': instance.text
        })

    for instance in queryset:
        results.extend(self._recursion_get_reply(instance.wenxian_pinglun_id))
    return results
相关推荐
zhangguojia77 分钟前
权限弹窗点击允许的授权流程
运维·服务器·数据库
jnrjian14 分钟前
Postgres 序列(sequence)的权限
数据库·postgresql
风禾万里15 分钟前
【无标题】
数据库
京师20万禁军教头16 分钟前
47-常用类-八大包装类(Wrapper Classes)
java
镜舟科技17 分钟前
为什么 Text-to-SQL 总是停在 Demo?
数据库·sql·demo·text-to-sql·镜舟科技·mip·语义视图
come1123422 分钟前
剪映零基础教程
java·linux·运维
16月6日-晴24 分钟前
Java面向对象——接口
java·开发语言
人生苦短12826 分钟前
Oracle RAC 日常管理+排错命令大全
数据库·oracle
镜舟科技26 分钟前
从 DBA 经验到 Agent:镜舟如何构建生产级智能排障体系
数据库·agent·dba·skill·devops agent·mirrorship
瀚高PG实验室34 分钟前
HAC 集群主节点状态在starting、running之间频繁切换
运维·数据库·postgresql·瀚高数据库