【发布时间】:2012-02-01 22:00:41
【问题描述】:
我们有实体节点:
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”排序,有时——按孩子的数量或其他东西。现在我们之前的解决方案看起来不太好。
我们如何克服这个问题?
【问题讨论】:
标签: python orm sqlalchemy python-elixir