エンティティノードがあります:
class Node(Entity):
parent = ManyToOne('Node')
children = OneToMany('Node')
次のようにクエリすると:
nodes = (
Node.query
.options(
eagerload(Node.children),
)
.order_by(desc(Node.id))
.all()
)
fathers = [n for n in nodes if n.parent == None]
子供たちとは対照的に、かなり秩序立った父親がいます。(fathers[0].children はソートされていないノードのリストを返します)
この問題のほぼ完璧な解決策は、ノードの「children」フィールドに「order_by」パラメーターを追加することです。このようなもの:
class Node(Entity):
parent = ManyToOne('Node')
children = OneToMany('Node', order_by='-id')
これで、子供たちは並べ替えられ、すべて問題ありませんが... 並べ替えの基準を変更したい場合はどうすればよいでしょうか? 「id」でソートしたい場合もあれば、子の数などでソートしたい場合もあります。さて、以前のソリューションはあまり良くありません。
どうすればこれを克服できますか?