Python 如何根据Django视图中queryset的公共元素按值分组?

Python 如何根据Django视图中queryset的公共元素按值分组?,python,django,view,nested,django-queryset,Python,Django,View,Nested,Django Queryset,我是Django的新手,我需要这些数据来呈现一些图表,请帮助 我必须将查询集作为特定结构中的词典 我的看法是: def pr1(request): fdate = unidecode(str(request.GET.get('fdate'))) tdate = unidecode(str(request.GET.get('tdate'))) dataSource = OrderedDict() dataSource["datase

我是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\u by
,以使其生效。

您确定要获得的结构吗?看起来有点奇怪-字典只有一个元素?你有什么特别的问题吗?你到底尝试了什么,问题是什么?此外,变量名和函数名通常应在带有下划线的
小写字母后面。@ger.s.brett我已经简化了我的代码。我字典的其余部分还可以,我只是不知道如何得到这部分fixed@AMC是的,我的问题是如何得到我想要的输出,我已经尝试了迭代,但无法计算它out@HadiWaheed然后分享你试过的代码,对吗?堆栈溢出不适用于一般的“我该怎么做”问题。