如何使用 Django 管理外部连接、group_by 和计数
How manage outer join, group_by and count with Django
使用 Django 我有以下模型:
class Player(models.Model):
name = models.CharField(max_length=64)
description = models.CharField(max_length=128)
groupPlayer = models.ForeignKey(GroupPlayer)
class GroupPlayer(models.Model):
description = models.CharField(max_length=128)
name = models.CharField(max_length=32)
每个玩家都链接到一个组。一些组没有玩家。我的目标是在 Django 中翻译以下查询(包括 LEFT OUTER JOIN 和 Group by):
select GroupPlayer.description, GroupPlayer.name, COUNT(Player.name) as gplayer
from (GroupPlayer LEFT OUTER JOIN Player ON GroupPlayer.id = Player.groupPlayer_id)
GROUP BY GroupPlayer.id
到目前为止我已经创建了 3 个查询集,但我无法将它们放在一起以获得我想要的结果:
queryset_player = Player.objects.values('groupPlayer_id').annotate(total=Count('groupPlayer__id'))
queryset_group = GroupPlayer.objects.select_retated(queryset_player)
queryset_group2 = GroupPlayer.objects.all().prefetch_related('player_set')
任何人都可以帮助解决 LEFT OUTER JOIN、分组和计数问题?
谢谢
from django.db.models import Count
groups = GroupPlayer.objects.annotate(num_players=Count('player'))
groups[0].num_players
使用 Django 我有以下模型:
class Player(models.Model):
name = models.CharField(max_length=64)
description = models.CharField(max_length=128)
groupPlayer = models.ForeignKey(GroupPlayer)
class GroupPlayer(models.Model):
description = models.CharField(max_length=128)
name = models.CharField(max_length=32)
每个玩家都链接到一个组。一些组没有玩家。我的目标是在 Django 中翻译以下查询(包括 LEFT OUTER JOIN 和 Group by):
select GroupPlayer.description, GroupPlayer.name, COUNT(Player.name) as gplayer
from (GroupPlayer LEFT OUTER JOIN Player ON GroupPlayer.id = Player.groupPlayer_id)
GROUP BY GroupPlayer.id
到目前为止我已经创建了 3 个查询集,但我无法将它们放在一起以获得我想要的结果:
queryset_player = Player.objects.values('groupPlayer_id').annotate(total=Count('groupPlayer__id'))
queryset_group = GroupPlayer.objects.select_retated(queryset_player)
queryset_group2 = GroupPlayer.objects.all().prefetch_related('player_set')
任何人都可以帮助解决 LEFT OUTER JOIN、分组和计数问题?
谢谢
from django.db.models import Count
groups = GroupPlayer.objects.annotate(num_players=Count('player'))
groups[0].num_players