2012-02-02 32 views
0

使用藥劑,並有兩個實體 - 選民和候選人 - 他們之間有許多對多(如果重要的話,選民可以投票給許多候選人)。想要獲得候選人名單按選民的數量排序。有沒有辦法使用這種藥劑的聲明?:如何通過與Elixir的多重關係計數?

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

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

我讀過SQLAlchemy ordering by count on a many to many relationship,但要做到這一點與藥劑更明確的方式來做到這一點。我希望,這是可能的。

回答

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') 
相關問題