我使用django-threadedcomments,但是該問題一般也適用於排序QuerySet。Django - 對線程註釋的QuerySet進行排序
QuerySet中的註釋對象有兩個重要的字段tree_path和submit_date。 tree_path的形式爲「a/b /.../ z」,其中'a'是樹中最高階的索引,'b'是樹中最低階的索引。所以第一個根註釋會有一個'1'的tree_path。該評論的孩子將具有「1/1」的樹形路徑。 '1'的另一個孩子將有一個'1/2'的tree_path。第二個根註釋的根路徑爲'2',等等......
QuerySet「qs」按上述排序,註釋按照線程順序排列,最上面的註釋最長。上面例子的tree_paths看起來像[1,1/1,1/2,2]。我想先用最新評論對每一級評論進行排序。所以QuerySet應該是[2,1,1/2,1/1]。
我該怎麼做?
我可排序只是使用root級別評論:
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')
但是,這破壞了評論的線程。
有什麼建議嗎?謝謝!