У нас есть узел сущности:
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" в поле "children" в Node.Примерно так:
class Node(Entity):
parent = ManyToOne('Node')
children = OneToMany('Node', order_by='-id')
А теперь наши дети отсортированы и все хорошо, но ... Что если мы хотим изменить критерии сортировки?Иногда мы хотим сортировать по «id», иногда - по количеству детей или что-то еще.Теперь наше предыдущее решение выглядит не очень хорошо.
Как мы можем преодолеть это?