如何在Elixir或SQLAlchemy中为自身的多对一关系创建可定制的“排序”?

2024-05-12 21:02:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有实体节点:

class Node(Entity):
    parent = ManyToOne('Node')
    children = OneToMany('Node')

当我们这样询问:

^{pr2}$

我们的父亲很有条理,而他们的孩子则相反。(父节点[0].children返回未排序的节点列表)

对于这个问题,最完美的解决方案是在节点的“children”字段中添加“order_by”参数。像这样:

^{3}$

现在我们的孩子们都很好,一切都很好,但是。。。 如果我们想改变排序标准呢?有时按“我们想要的”或“我们想要的东西的数量”来分类。现在我们以前的解决方案看起来不太好。在

我们如何克服这个问题?在


Tags: 实体node列表节点排序孩子解决方案class
1条回答
网友
1楼 · 发布于 2024-05-12 21:02:42

不确定这个长生不老的语法是什么,但这里是我纯粹使用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()

相关问题 更多 >