【问题标题】:Get month grouped in django ORM在 django ORM 中获取月份分组
【发布时间】:2018-01-03 05:09:10
【问题描述】:

到目前为止,我已经尝试使用

提取月份详细信息
total_dict = MyModel.objects.values('Gender', 'DOJ').annotate(count=Count('Gender')).order_by('DOJ', 'Months')
for d in total_dict:
    d['DOJ'] = str(d['DOJ'].month)
print total_dict

输出是:

[{'DOJ': '1', 'Gender': u'Male', 'value': 1}, {'DOJ': '1', 'Gender': u'Male', 'value': 1}, {'DOJ': '1', 'Gender': u'Female', 'value': 1}] 

我想要的是将具有相同性别的条目的值加在一起,例如而不是{'DOJ': '1', 'Gender': u'Male', 'value': 1}, {'DOJ': '1', 'Gender': u'Male', 'value': 1},应该有一个条目{'DOJ': '1', 'Gender': u'Male', 'value': 2}

我的model.py是

class MyModel(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
Dept=models.CharField(max_length=200,blank=True, null=True, default=None)
Gender =models.CharField(max_length=200,blank=True, null=True, default=None)
Shift =models.CharField(max_length=200,blank=True, null=True, default=None)
Months=models.CharField(max_length=200,blank=True, null=True, default=None)
DOJ=models.DateField(null=True)

实际上不需要月份字段!

我怎样才能做到这一点?

【问题讨论】:

  • 您能否为您的模型架构提供一些示例数据?
  • @Anomitra 我已经分享了我的模型!请检查
  • 所以基本上,您想要每个 DOJ-Gender 对的 值总和
  • @Anomitra 是的,正确!

标签: python django django-views django-queryset


【解决方案1】:
total_dict = MyModel.objects.values('Gender', 'DOJ').annotate(Count('Gender')).order_by('DOJ', 'Months')
for each_dict in total_dict:
    each_dict['value']=each_dict[0].Gender__count
print total_dict

参考aggregation in django

【讨论】:

  • KeyError: 0 for each_dict[0].Gender__count
【解决方案2】:
total_dict = MyModel.objects.annotate(month=TruncMonth('DOJ')).values('Gender', 'month').annotate(sum=Count('Gender'))

试试这个。

【讨论】:

  • 我想每个月分别统计男性和女性
  • @cloud 已更新。
  • @cloud 我已经更新了我的答案,在我的系统上测试了这个查询,它工作正常。对你起作用吗?如果没有,你可以print total_dict 并显示输出吗?
  • 非常感谢!:)
猜你喜欢
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 2010-11-17
  • 2021-03-15
相关资源
最近更新 更多