我们有实体节点:
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]
与他们的孩子相比,我们得到了相当有序的父亲。 (父亲[0] .children返回未排序的节点列表)
这个问题的几乎完美解决方案是添加" order_by"参数"儿童" Node中的字段。像这样:
class Node(Entity):
parent = ManyToOne('Node')
children = OneToMany('Node', order_by='-id')
现在我们的孩子们整理好了,但是...... 如果我们想要更改排序标准怎么办?有时我们希望按照" id"排序,有时候 - 按孩子或其他数量排序。现在我们以前的解决方案看起来并不那么好。
我们如何克服这个问题?
答案 0 :(得分:0)
不确定这个Elixir语法是什么,但这是我纯粹使用SQLAlchemy所做的。我创建了一个不使用默认方法调用子项的函数:
class Node(...):
def get_children(self, order='new'):
if order == 'new':
orderby = Node.created.desc()
elif order == 'old':
orderby = Node.created.asc()
return DBSession.query(Node).filter(Node.parent_id == self.id).order_by(orderby).all()