Django-线程注释的排序查询集
我正在使用,但是这个问题通常也适用于对查询集进行排序 QuerySet中的comment对象有两个重要字段,tree_path和submit_date。树路径的形式为“a/b/../z”,其中“a”是树中的最高阶索引,“b”是树中的最低阶索引。因此,第一个根注释的树路径为“1”。该注释的子项将具有“1/1”的树路径。“1”的另一个子级的树路径为“1/2”。第二个根注释的根路径为“2”,以此类推 QuerySet“qs”的排序如上所述,注释按线程顺序排列,最早的注释位于顶部。上面示例中的树路径看起来就像[1,1/1,1/2,2]。我想先用最新的评论对每个级别的评论进行排序。因此查询集应该是[2,1,1/2,1/1] 我该怎么做 我可以使用以下命令对根级别的注释进行排序:Django-线程注释的排序查询集,django,sorting,comments,django-queryset,threaded-comments,Django,Sorting,Comments,Django Queryset,Threaded Comments,我正在使用,但是这个问题通常也适用于对查询集进行排序 QuerySet中的comment对象有两个重要字段,tree_path和submit_date。树路径的形式为“a/b/../z”,其中“a”是树中的最高阶索引,“b”是树中的最低阶索引。因此,第一个根注释的树路径为“1”。该注释的子项将具有“1/1”的树路径。“1”的另一个子级的树路径为“1/2”。第二个根注释的根路径为“2”,以此类推 QuerySet“qs”的排序如上所述,注释按线程顺序排列,最早的注释位于顶部。上面示例中的树路径看起
qs = qs.extra(select={ 'tree_path_root': 'SUBSTRING(tree_path, 1, 1)' })
.order_by('%stree_path_root' % ('-'), 'tree_path')
但我无法同时找出如何对非根注释进行排序。我试过这样的方法:
qs = qs.extra(select={ 'tree_path_root': 'SUBSTRING(tree_path, 1, 1)'
'tree_path_sec' : 'SUBSTRING(tree_path, 3, 1)'})
.order_by('%stree_path_root' % ('-'), '%stree_path_sec' % ('-'), 'tree_path')
但这破坏了评论的线程化
有什么建议吗?谢谢 我意识到这已经有一段时间没有你发帖了。。所以你现在可能已经有了答案,或者你已经离开了。不管怎样,给你……:) 您误解了django threadedcomments应用程序中的树路径结构。永远不会有1/1的树路径,因为每个路径段都是ThreadedComment的唯一主键 如果以ThreadedComment
1
开头并添加回复,则会得到路径1/2
。然后,如果您添加一个额外的顶级帖子,它将获得路径3
。这将给你:
1
1/2
3
如果你再次回复第一篇帖子,你会得到:
1
1/2
1/4
3
现在来解决排序问题。我尝试过做类似的排序(通过投票分数,类似于reddit),但没有找到简单的方法。然而,这里有一个可以使用的递归方法:(它很难看,而且很慢……但它是一个起点)
使用此方法,只需传入该模型的整个查询注释集,python就会为您排序。:)
这将为您提供以下方面的最终结果:
3
1
1/4
1/2
如果有人有办法缩短这段时间,请随意投稿。我意识到这已经有一段时间了,因为你发布了。。所以你现在可能已经有了答案,或者你已经离开了。不管怎样,给你……:) 您误解了django threadedcomments应用程序中的树路径结构。永远不会有1/1的树路径,因为每个路径段都是ThreadedComment的唯一主键 如果以ThreadedComment
1
开头并添加回复,则会得到路径1/2
。然后,如果您添加一个额外的顶级帖子,它将获得路径3
。这将给你:
1
1/2
3
如果你再次回复第一篇帖子,你会得到:
1
1/2
1/4
3
现在来解决排序问题。我尝试过做类似的排序(通过投票分数,类似于reddit),但没有找到简单的方法。然而,这里有一个可以使用的递归方法:(它很难看,而且很慢……但它是一个起点)
使用此方法,只需传入该模型的整个查询注释集,python就会为您排序。:)
这将为您提供以下方面的最终结果:
3
1
1/4
1/2
如果有人有办法缩短这个时间,请随意贡献。首先只选择根注释,对其排序,然后选择子注释并对其排序,最后将两个集连接起来,怎么样?这样行吗?首先只选择根注释,对它们进行排序,然后选择子注释,对它们进行排序,最后将这两个集连接起来,怎么样?这样行吗