关于django 分组聚合的使用

81 阅读1分钟

class AssetsParticular(models.Model):
    """明细"""
    date = models.DateField(verbose_name='日期')
    business_type = models.CharField(max_length=255, verbose_name='业务类型')
    type_detail = models.CharField(max_length=255, blank=True, null=True, verbose_name='类型明细')
    summary = models.CharField(max_length=255, blank=True, null=True, verbose_name='摘要')
    total_amount = models.FloatField(verbose_name='总金额(元)')
    
    ......
 
   
   filter_dict = {}
   group_field = ["business_type",'type_detail']
 
  # values(values_list)用来指定用来group by的字段,不需要最终查询的就不必聚合了,
  # annotate 执行分组
  # 不在values(values_list) 和 annotate后面的数据是不会显示的
  AssetsParticular.objects.filter(**filter_dict).values(*group_field).annotate(c=Count("type_detail"))

image.png