2

初めてのプログラミング経験である 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)

少なくとも 1 人がいる地域組織ごとにグループ化する必要があります。私が試した人が少なくとも1人いる組織の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 組織を取得するにはどうすればよいですか。少なくとも 1 人はdistrict()
感謝していません

4

1 に答える 1