Python 在Django中,获取各种条件的多个计数

Python 在Django中,获取各种条件的多个计数,python,django,Python,Django,我正在用Django 2.2开发“管理仪表板” 我将从一个表中计算各种条件的“对象”,并将它们发送到模板 我的代码在下面 #模型 类用户(models.Model): uid=models.AutoField(主键=True) status=models.IntegerField(blank=True,null=True) 已创建\u at=models.DateTimeField(空白=真,空=真) 在unix=models.CharField处创建(最大长度=100,空白=True,空=Tr

我正在用Django 2.2开发“管理仪表板”

我将从一个表中计算各种条件的“对象”,并将它们发送到模板

我的代码在下面

#模型
类用户(models.Model):
uid=models.AutoField(主键=True)
status=models.IntegerField(blank=True,null=True)
已创建\u at=models.DateTimeField(空白=真,空=真)
在unix=models.CharField处创建(最大长度=100,空白=True,空=True)
country_code=models.IntegerField(空=真,空=真)
recommender\u id=models.ForeignKey('self',on\u delete=models.SET\u NULL,blank=True,NULL=True,db\u column='recommender\u id')
is_agreement=models.PositiveIntegerField(空白=True,空=True)
删除\u yn=models.CharField(最大长度=1,默认值为'n')
is_sms=models.PositiveIntegerField(空白=True,空=True)
is_email=models.PositiveIntegerField(空白=True,空=True)
is_push=models.PositiveIntegerField(空白=True,空=True)
def索引(请求):
#新用户
user\u lastweek=user.objects.filter(在上周一创建,在上周日创建)。count()
user\u thisweek=user.objects.filter(在本周一创建,在明天创建)。count()
用户变更=用户本周-用户上周
#用户总数
user\u total\u lastweek=user.objects.filter(在\u lte=last\u sunday创建的)。count()
user\u total\u thisweek=user.objects.filter(在\u lte=明天创建的)。count()
用户总数变化=本周用户总数-上周用户总数
上下文={
“用户上周”:用户上周,
...
}
返回呈现(请求'main/index.html',上下文)
我只写了许多条件中的几个

但我的代码每次都会导致重复查询命中

我需要的结果是

1. user_lastweek : 114
2. user_thisweek : 98
3. user_total_lastweek : 1232
4. user_total_thisweek : 1330
仅使用一个或更少的查询来呈现模板的效率如何?

自己解决了这个问题

我应该读更多关于Django文档的内容

Use.aggregate()

test=User.objects.aggregate(
last=Count('pk',filter=Q(在lte=last\u sunday创建)),
这=计数('pk',过滤器=Q(在lte=明天创建)),
last1=计数('pk',filter=Q(创建时间=上周一,创建时间=上周日)),
this1=计数('pk',filter=Q(创建时间=本周一,创建时间=明天)),
)
打印(测试)
{'last': 1011, 'this': 1018, 'last1': 38, 'this1': 1}