我开始学习 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()
但是,因为比例是 OneToMany,对吗?
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']
区域 0 4
区域 1 16区域 2
64
...
...
之后distinct()
,不要按我的需要工作values()
。annotate()
我的错误在哪里,我如何获得正确的 QS uniq 组织,至少有一个人没有district()
谢谢