2016-03-25 7 views
1

ile saymak yönetmek:nasıl dış, group_by katılmak ve Django ben takip modellerine sahip kullanarak 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) 

Her oyuncu bir gruba bağlanır. Bazı grupta oyuncu yok. Amacım (tarafından JOIN ve Grup sol dış dahil) Django takip sorgusu çevirmek için geçerli:

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 

Şimdiye kadar yarattık 3 Sorgu Kümesi, ama keşke sonucu elde etmek için onları bir araya koyamazsınız :

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') 

Herkes bu SOL DIŞ JOIN, Grup tarafından ve sayımda yardımcı olabilir?

Teşekkür

cevap

0
from django.db.models import Count 

groups = GroupPlayer.objects.annotate(num_players=Count('player')) 
groups[0].num_players 

Aggragation