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
相关推荐
DBA小马哥13 小时前
Oracle迁移金仓全攻略:工业IOT场景下的易用性与安全保障
数据库·物联网·安全·oracle
‘胶己人’13 小时前
redis分布式锁
数据库·redis·分布式
Adellle13 小时前
Java-Stream流
java
xUxIAOrUIII13 小时前
JWT和拦截器使用【附Maven中操作步骤】
java·maven
带刺的坐椅13 小时前
Liquor(Java 脚本)替代 Groovy 作脚本引擎的可行性分析
java·groovy·liquor
初恋叫萱萱13 小时前
基于CodeRider-Kilo和MySQL开发一款书店管理系统
数据库·mysql·产品运营
Elastic 中国社区官方博客13 小时前
通过 Elasticsearch 中的 function score query 按利润和受欢迎程度提升电商搜索效果
大数据·数据库·elasticsearch·搜索引擎·全文检索
武子康13 小时前
Java-203 RabbitMQ 生产者/消费者工作流程拆解:Connection/Channel、默认交换器、ACK
java·分布式·消息队列·rabbitmq·erlang·ruby·java-rabbitmq
qq_3663363713 小时前
mysql-5.7.38-winx64.zip 启动教程(免安装版)
数据库·mysql·adb
不穿格子的程序员13 小时前
Redis篇5——Redis深度剖析:系统的“隐形杀手”——热Key与大Key问题
数据库·redis·缓存·热key·大key