首页 > 解决方案 > 如何在 django 中计算每天的女性和男性人数(分组)

问题描述

我正在尝试按日期分组并计算字段数(choice field : male and female

这是我试过的

genders = (
   (male , _('male')),
   (female , _('female')),

)

class MyModel(models.Model):
    gender =  models.CharField(max_length=10,choices=genders,default=male)
    created_at = models.DateTimeField(auto_now_add=True)
    #others

我的意见.py

male= Q(gender='male')
female= Q(gender='female')
lists = MyModel.objects.annotate(day=TruncDay('created_at')).values('day').annotate(qnt=Count('id'),male=Count(male),female=Count(female)
).order_by('-day')

我希望返回这样的东西:

day : 1-8-2021 , qnt: 15 , male : 8 , female : 7

qnt但它返回男性和女性的总量!请问有更好的方法来实现吗?

标签: pythondjango

解决方案


您可以使用以下方法过滤计数:

data = MyModel.objects.values(
    day=TruncDay('created_at')
).annotate(
    qnt=Count('pk'),
    male=Count('pk', filter=Q(gender='male')),
    female=Count('pk', filter=Q(gender='female'))
).order_by('-day')

推荐阅读