Django

2016-04-14 20 views
1

'da bir çok çocuk nesnesinin ebeveynleri paylaşıp paylaşmadığını kontrol edin Django'da bu basit modelleri kullanıyorum. İki hesap acc1 ve acc2 göz önüne alındığında, her ikisi de aynı ekipte yer alıp almadıklarını anlamanın en iyi yolu nedir? Bunu olabildiğince kısa tutmaya çalışıyorum (çünkü bu bir lambda, adlandırılmış değişken değil).Django

class Team(models.Model): 
    members = models.ManyToManyField(Account, through='Participation') 

class Participation(models.Model): 
    team = models.ForeignKey(Team, on_delete=models.CASCADE) 
    account = models.ForeignKey(Account, on_delete=models.CASCADE) 

Şimdiye kadar bende ne:

def are_in_same_team(acc_pk1, acc_pk2): 
    teams = Team.objects.filter(participation__account__id__in=[acc_pk1, acc_pk2]) 
    return (acc_pk1 == acc_pk2 and len(teams) == 1) or (len(teams) == 2 and teams[0] == teams[1]) 
+0

'dönüş acc1.team deneyin == acc2.team' – xbello

+0

Bir hesapta çok sayıda takım olabilir, bunun yerine nesnenin bir "team_set" öğesi vardır. Önerdiğin şey yapılamaz. – Crossfire

cevap

2

hem üye bir ekip vardır eğer kontrol edebilir:

def are_in_same_team(acc_pk1, acc_pk2): 
    return Team.objects.filter(members__id=acc_pk1).filter(members__id=acc_pk2).exists() 
+0

Bu aslında çalışıyor! Teşekkür ederim. – Crossfire

+0

Yardım etmekten memnun oldum! – AKS