我是Django新手,我需要此数据来绘制一些图表,请帮助我必须在特定结构中将我的查询集作为字典使用]
这是我的观点:
def pr1(request):
fdate = unidecode(str(request.GET.get('fdate')))
tdate = unidecode(str(request.GET.get('tdate')))
dataSource = OrderedDict()
dataSource["dataset"] = []
for key in Production.objects.filter(date__range=(fdate, tdate)).values('date', 'comName').annotate(total_qty=Sum('qty')):
seriesname = {}
data = {}
data["seriesname"] = key['comName']
data["value"] = key['total_qty']
dataSource["dataset"].append(data)
这是我的查询的输出:
[
{'date': '1398/08/01', 'comName': 'a', 'total_qty': 253.0},
{'date': '1398/08/02', 'comName': 'a', 'total_qty': 263.0},
{'date': '1398/08/01', 'comName': 'b', 'total_qty': 3.938},
{'date': '1398/08/02', 'comName': 'b', 'total_qty': 31.625}
]
附加后的数据源:
"dataset": [
{
"seriesname": "a",
"value": 253
},
{
"seriesname": "a",
"value": 263
},
{
"seriesname": "b",
"value": 3.938
},
{
"seriesname": "b",
"value": 31.625
}
但我必须按以下方式获得它:
"dataset": [
{
"seriesname": "a",
"data": [
{
"value": "253"
},
{
"value": "263"
}]},
{
"seriesname": "b",
"data": [
{
"value": "3.938"
},
{
"value": "31.625"
}]}
]
您的问题不是真正的Django特定问题,而是一般的Python问题。您可以更改迭代,例如
def pr1(request):
fdate = unidecode(str(request.GET.get('fdate')))
tdate = unidecode(str(request.GET.get('tdate')))
dataSource = OrderedDict()
dataSource["dataset"] = []
seriesname = ''
data = None
for key in Production.objects.filter(date__range=(fdate, tdate)).values('date', 'comName').annotate(total_qty=Sum('qty')).order_by('comName':
if not key['comName'] == seriesname:
seriesname = key['comName']
if data is not None:
dataSource["dataset"].append(data)
data = {
'seriesname': key['comName'],
'data': [
{'value': key['total_qty']}
]
}
else:
data['data'].append({'value': key['total_qty']})
dataSource["dataset"].append(data)
我已将order_by
添加到您的查询集中,以使其正常工作。