ww = qs.filter(month=num.month, warehouse=num.warehouse.id).annotate( apply_prove=Count('id')) 为什么查询到3条记录,apply_provesss还是1呢,怎么修改才是3,并且www queryset中的还是object而不是字典
时间: 2024-01-13 11:04:23 浏览: 71
根据你提供的代码,假设qs是一个QuerySet对象,那么这段代码的作用是查询month等于num.month,warehouse等于num.warehouse.id的记录,并统计每条记录中id的个数,存储在apply_prove中。
根据你的描述,查询到了3条记录,但是apply_prove为1,这种情况可能是由于Count方法没有按照你的预期进行分组操作,而是将所有记录的id个数汇总计算为1,导致apply_prove的值都为1。
可以尝试将annotate方法中的参数改为:apply_prove=Count('id', distinct=True),这样Count方法就会按照不同的记录进行分组计算,得到正确的apply_prove值。修改后的代码如下:
```
ww = qs.filter(month=num.month, warehouse=num.warehouse.id).annotate(apply_prove=Count('id', distinct=True))
```
另外,你提到ww queryset中的还是object而不是字典,这是因为annotate方法生成的QuerySet对象是Model对象而不是字典,可以通过在annotate方法中添加参数将结果转化为字典形式。修改后的代码如下:
```
ww = qs.filter(month=num.month, warehouse=num.warehouse.id).annotate(apply_prove=Count('id', distinct=True)).values('month', 'warehouse', 'apply_prove')
```
这样就可以得到一个字典形式的QuerySet对象了。
阅读全文