如何按照与Elixir的多对多关系进行排序?

时间:2012-02-02 21:49:08

标签: python orm sqlalchemy python-elixir

使用Elixir并拥有两个实体 - 选民和候选人 - 他们之间有多对多(如果重要,选民可以投票给许多候选人)。想要获得根据选民数量排序的候选人名单。有没有办法使用这样的Elixir声明?:

class Voter(Entity):
    votes = ManyToMany('Candidate')

class Candidate(Entity):
    voters = ManyToOne('Voter')

我读过SQLAlchemy ordering by count on a many to many relationship但想要用Elixir更清楚地做到这一点。我希望,这是可能的。

1 个答案:

答案 0 :(得分:1)

只有这样我才能发现在Elixir中通过多对多关系进行排序可以从关系中找出辅助表,并且“就像在炼金术中一样”。大概是这样的:

secondr_table = Candidate._descriptor.find_relationship('voters').secondary_table
cands_by_rank = (
    session.query(
        Candidate.id,
        func.count(secondr_table.c.candidate_id).label('total')
    )
    .join(secondr_table)
    .group_by(Candidate)
    .order_by('total DESC')