2015-04-14 28 views
-2

我已经按照我的Django项目模型:ORM Django的LEFT JOIN + GROUP BY

class Player(models.Model): 
    name = models.CharField() 

class Team(models.Model): 
    name = models.CharField() 

class Membership(models.Model): 
    player = models.ForeignKey(Player) 
    team = models.ForeignKey(Team) 
    date_joined = models.DateField() 
    date_leaved = models.DateField(blank=True, null=True) 

我想创建视图上Django的水平,这将执行:

CREATE VIEW last_contract_expire AS 
SELECT Player.name, MAX(Membership.date_leaved) 
FROM player LEFT OUTER JOIN membership ON membership.player.id=player.id 
GROUP BY player.id; 

回答

0

的Django目前并不支持SQL视图(see this ticket)。 Django也不直接支持SQL GROUP BY。无论如何,你可以做到这样的:

def last_contract_expire(): 
    return Player.objects.all().annotate(max_date_leaved=Max('membership__date_leaved')) 

这将返回所有玩家每个玩家都会有属性namemax_date_leaved。希望这可以帮助

+0

这正是我正在寻找的。谢谢! – Heron