django实现一个对自关联评论表的无限极评论封装
程序员文章站
2022-05-31 09:19:07
...
给定一个课程的id 返回课程下的评论(无限极)
class Coouser_Comments_View(APIView):
def get(self,reqeust):
course_id = reqeust.GET.get('course_id')
course_comments = CourseComments.objects.filter(course_id=course_id)
data = CourseComments_Ser(course_comments, many=True).data
list = [] # 最后的结果存放在这里
tree = {} # 相当于是承接的部分
root = ''
p_id = ''
# 封装了tree
for i in data:
user = User.objects.filter(id=i['user_id']).first()
ser = UserSer(user).data
# 将data循环,然后加入一个dict中,key为每条数据的ID,val对应为整条数据
i['user_id'] = ser
tree[i["id"]] = i
# { 1:{id:1}, 2:{id:2}, 3:{id:3} }
# print(tree)
for i in data:
# p_id==0,他就是祖先
if i["parent_id"] == 0:
# root = tree[i] #i.di为tree里的key,将key对应的val取出
list.append(i)
else:
p_id = i["parent_id"] # 1
# 判断父级是否有孩子字段(childlist),如果有将当前数据加入,如果没有添加(childlist)后再加入
if "childlist" not in tree[p_id]:
tree[p_id]['childlist'] = []
# 加入父级用户的记录
user2 = User.objects.filter(id=tree[p_id]['user_id']['id']).first()
ser2 = UserSer(user2).data
i['p'] = ser2
tree[p_id]["childlist"].append(i)
resp = {}
resp['data'] = list
return Response(resp)
加到list中的都是父级评论,为什么父级评论的childlist里面会有他相应的子评论?
你可以先往深了想父级评论的childlist里有他的子评论,他的子评论的childlist里有他的子评论
禁止套娃(滑稽)其实是因为循环里的每一步修改都是将自己本身加入到了父评论的childlist中,然后父评论发生改变, 父级评论的父级评论发生改变,就很像递归哈哈哈 其实打印一下tree你就大概知道原理了
上一篇: 面向对象的三个基本特征
下一篇: TP框架封装无限极分类