我在Django Model中有以下树结构
Main_Comment
id
comment_list [Comment]
Comment
id
parent_comment [Main_Comment or Comment]
child_comment_list [Comment]
如果给出一个main_comment id,你将如何遍历Django查询中的整个树?我知道如果所有的Comment模型实例都有主注释,你可以通过main_comment检索所有表并过滤,但我想保留嵌套注释的嵌套结构。有没有办法做到这一点?
答案 0 :(得分:0)
特别是对于您的模型,如果您希望使用Django查询,您可以尝试使用递归方法来读取给定main_comment_id的所有注释
以下是查询树结构的深度优先方法
main_comment = Main_Comment.objects.get(id=main_comment_id)
current_depth = 0
tree_comments = traverse_comments(main_comment, current_depth)
def traverse_comments(comment, depth)
if comment.comment_list.length == 0:
return [{comment: comment, depth: depth}]
else:
traversed_comments = [{comment: comment, depth: depth}]
new_depth = depth + 1
for child_comment in comment.comment_list:
traversed_comments = traversed_comments +traverse_comments(child_comment, new_depth)
return traversed_comments
为此,您需要编辑命名为此的评论模型列:
Comment
id
parent_comment [Main_Comment or Comment]
comment_list [Comment]
您也可以使用Django使用原始SQL查询 看看这个,可能会有所帮助:https://github.com/Husseny/treebirds 检查nestedcomments /
中的models.py文件