我使用此功能:
def get_month_hours(self):
last_year = timezone.now() - datetime.timedelta(days=365) # for more accurate result, please use python-dateutil or similar tools
return Timesheet.objects.annotate(total_hour=Sum('working_hour')).filter(owner=self.user, date__gte=last_year).order_by('date')
我想填充使用完全相同代码的图表:
"data": [65, 59, 80, 81, 56, 55, 40],
所有值对应于每月的总工时(我的模型字段)。
因此,我有2个问题: 首先,我收到以下数据:
{
"id": 3,
"title": "Développement intranet",
"date": "2018-11-19",
"working_hour": 8.5,
"week": 47,
"owner": 1
},
{
"id": 1,
"title": "Développement intranet",
"date": "2018-11-26",
"working_hour": 8.5,
"week": 48,
"owner": 1
},
{
"id": 2,
"title": "Développement intranet",
"date": "2018-11-27",
"working_hour": 8.5,
"week": 48,
"owner": 1
},
{
"id": 4,
"title": "dev python",
"date": "2018-11-28",
"working_hour": 5.25,
"week": 48,
"owner": 1
},
{
"id": 5,
"title": "Développement intranet",
"date": "2018-12-03",
"working_hour": 8.5,
"week": 49,
"owner": 1
}
但是我只想获得一个值:每月的working_hour总数。
第二个问题是:如何将此值传递给我的“数据”?我是这样想的: “数据”:$ .ajax({ 网址:“ / my-json-url /”, 方法:“获取”, })
对吗?
每笔预付款
答案 0 :(得分:1)
首先,您可以尝试这样:
return Timesheet.objects.annotate(total_hour=Sum('working_hour')).filter(owner=self.user, date__gte=last_year).order_by('date')
.values_list('total_hour', flat=True)
这将为您提供total_hour
的数组数据
在enter link description here的api视图中,您必须编辑
@api_view(['GET'])
def timesheet_total_per_month(request):
hours = ReturnHour(request.user.pk, datetime.datetime.now().isocalendar()[1])
timesheets = hours.get_month_hours()
return Response({'data':timesheets})