我们有实体节点:
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 返回未排序的节点列表)
这个问题几乎完美的解决方案是在 Node.js 中的“children”字段中添加“order_by”参数。像这样的东西:
class Node(Entity):
parent = ManyToOne('Node')
children = OneToMany('Node', order_by='-id')
现在我们的孩子已经排序,一切都很好,但是......如果我们想改变排序标准怎么办?有时我们想要按“id”排序,有时——按孩子的数量或其他东西。现在我们之前的解决方案看起来不太好。
我们怎样才能克服这一点?