如何在Django模型中查询树结构

时间:2015-04-14 03:06:19

标签: python django django-models

我在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检索所有表并过滤,但我想保留嵌套注释的嵌套结构。有没有办法做到这一点?

1 个答案:

答案 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文件