Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ORM Django左连接+;分组_Sql_Django_Group By_Left Join_Aggregate Functions - Fatal编程技术网

Sql ORM Django左连接+;分组

Sql ORM Django左连接+;分组,sql,django,group-by,left-join,aggregate-functions,Sql,Django,Group By,Left Join,Aggregate Functions,我的Django项目中有以下模型: 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_j

我的Django项目中有以下模型:

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;

Django当前不支持SQL视图()。Django也不直接支持SQL
GROUPBY
。无论如何,您可以这样实现:

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

这将返回所有玩家,每个玩家都有属性
name
max\u date\u leaved
。希望这有帮助

这正是我想要的。谢谢!