Заказ по количеству отношений OneToMany Elixir - PullRequest
1 голос
/ 31 октября 2011

Я использую Elixir для ORM, но у меня проблема с попыткой упорядочить по взаимосвязи.

Я пытаюсь получить список пользователей, отсортированный по количеству сообщений, которые они имеют.Я пробовал такие способы, как

User.query.join(User.posts).order_by(func.count(User.posts)).all()

без какого-либо успеха.

Вот мои сущности Эликсира:

class User(Entity):
    username = Field(Unicode(100))
    posts = OneToMany('Post', inverse='user')


class Post(Entity):
    content = Field(Unicode(20000))
    user = ManyToOne('User')

1 Ответ

5 голосов
/ 31 октября 2011

это распространенный вопрос, и пример запроса приведен в руководстве ORM по адресу: http://www.sqlalchemy.org/docs/orm/tutorial.html#using-subqueries. Просто измените, где написано order_by (User.id), чтобы сказать order_by (stmt.c.address_count):

>>> from sqlalchemy.sql import func
>>> stmt = session.query(Address.user_id, func.count('*').\
...         label('address_count')).\
...         group_by(Address.user_id).subquery()

>>> for u, count in session.query(User, stmt.c.address_count).\
...     outerjoin(stmt, User.id==stmt.c.user_id).order_by(stmt.c.address_count): 
...     print u, count
...