2013-10-22 47 views
2

我開始學習我的第一個編程經驗Django。在Django註釋中過濾相關字段

我旁邊型號:

class Region(models.Model): 
    name = models.CharField(u'Region', max_length=254, unique=True) 


class Organization(models.Model): 
    name = models.TextField(u'Org_name') 
    inn = models.CharField(u'INN', max_length=254) 
    region = models.ForeignKey(
     Region, 
     related_name='org_region', 
     blank=True, 
     null=True, 
     on_delete=models.SET_NULL 
     ) 

class Person(models.Model): 
    region = models.ForeignKey(
     Region, 
     related_name='p_region', 
     blank=True, 
     null=True, 
     on_delete=models.SET_NULL 
     ) 
    organization = models.ForeignKey(
     Organization, 
     related_name='p_org', 
     blank=True, 
     null=True, 
     on_delete=models.SET_NULL 
     ) 
    inn = models.CharField(u'INN', max_length=254) 

我需要做出改變,其中至少有一人區的組織結構進行分組。 要獲得QS,其中至少有一個人我已經嘗試了組織:

Organization.objects.filter(p_org__isnull=False).distinct() 

但是,但是,因爲該比例爲一對多,是不是?

qs = Person.objects.filter(organization__isnull=False) 
Organization.objects.filter(p_org__in=qs).distinct() 

結果等於,但我不確定第一個版本是否正確。

>>> Organization.objects.filter(p_org__in=qs).distinct().filter(region__name__exact="Region1").count() 
12 

>>> for i in Organization.objects.filter(p_org__isnull=False).distinct().values('region__name').annotate(count_in_reg=Count('region__name')): 
...  print i['region__name'], i['count_in_reg'] 

Region0 4
區域1 16
區域2的64
...
...

distinct()values()annotate()之後,因爲我需要不工作。 哪裏是我的錯,我如何得到正確的QS uniq的組織,即至少有一個人不district()
感謝

回答

0

由於區域是一個ForeignKey到人模型,你可以通過區域權限的人員模型 。你可能想試試這個:

Organization.objects.filter(region__p_org__isnull=False).distinct()