0
我們有實體節點:如何在Elixir或SQLAlchemy中進行可自定義的「order by」與自身的多對一關係?
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中的「children」字段。事情是這樣的:
class Node(Entity):
parent = ManyToOne('Node')
children = OneToMany('Node', order_by='-id')
而現在我們的孩子進行排序,一切都很好,但是...... 如果我們想改變標準排序?有時我們希望通過「id」進行排序,有時候需要按照孩子的數量或其他方式進行排序。現在我們以前的解決方案看起來不太好。
我們該如何克服這個問題?
Thx。我還沒有找到更好的。 – Andrew 2012-02-02 18:29:52