查询按外键项的数量对模型进行分类

时间:2020-08-07 20:28:26

标签: django

我有以下型号:

Family():
  family_id = models.CharField(db_index=True, max_length=100)

Individual():
  individual_id = models.TextField(db_index=True)
  family = models.ForeignKey(Family, on_delete=models.PROTECT)

我需要编写查询以获取以下结果:

Family Count | Individual Count
1            |      3 
5            |      8 
10           |      19

因此,我需要按家庭人数对家庭进行分类(不是其family_id,而是其计数!)。可能吗?如果是的话,怎么办?

到目前为止,我能够获得每个family_id有多少个人:

overview_data = Family.objects.annotate(ind_count=Count('individual')).order_by('ind_count')

现在,我需要一种方法来按组中的个人人数进行汇总。

1 个答案:

答案 0 :(得分:0)

目前,我无法通过SQL查询来解决此问题,而是使用python解决了。我相信可以纯粹使用SQL查询,但是我无法提出。因此,如果您有任何想法,请回答。这是我解决问题的方法:

from collections import Counter 

def _generate_overview_data(project):                                                                                      
    data = Family.objects.annotate(ind_count=Count('individual'))                                                                     
            .values_list('ind_count', flat=True)                                                     
    return sorted(Counter(data).items())

data看起来像[1, 1, 1, 1, ..., 2, 2, ..., 3, 3, 3, ...] 因此,我计算了1、2、3的出现次数,并得到了[[1, 89], [2, 10], ...]类型的有序列表,其中89个家庭有1个个人,10个家庭有{{ 1}}个人等;那就是我更愿意直接从2那里得到的东西。

相关问题