我有以下两行代码
CategoryContext = Somemodel.objects.values('title__categories__category').distinct()
CategoryContextSum = CategoryContext.annotate(Total_Revenue=Sum('revenue')).order_by('-Total_Revenue')
CategoryContextAvg = CategoryContext.annotate(Average_Revenue=Avg('revenue')).order_by('-Average_Revenue')
avg查询生成一个对象的querylist,其中类别排在第一位,其次是revenue。所以基本上:
<QuerySet [{'title__categories__category':'Category', 'Average_Revenue':Decimal('100'),}, {'title__categories__category':'Category2':'Average_Revenue':Decimal('120'), }]>
另一方面,sum查询会产生收入,然后是类别,因此基本上:
<QuerySet [{'Total_Revenue':Decimal('100'), 'title__categories__category':'Category'}, {'Total_Revenue':Decimal('120'), 'title__categories__category':'Category2'}]>
到目前为止,我已经尝试过翻转查询并更改变量名,但我似乎无法理解为什么这两个语句的行为如此不同。有人知道什么会影响Django的注释行为吗?你知道吗
编辑: 如果您想知道为什么我需要理解这一点:我将queryset传递给一个方法,该方法将它转换为用于生成条形图的数据,并且数据集中的第一个对象必须是值的标识符。我可以通过检查这是否真的是这样,或者用其他方法使整个过程颠倒过来,但在我看来,这是不必要的
这与
annotate
几乎没有关系。Python中的字典没有常规意义上的排序(至少在python3.6之前是这样),而且键可以在不同的queryset结果之间进行不同的排序。你知道吗这几乎不构成问题,因为您将通过键而不是序列(如序列)访问所需的值:
如果plot函数采用dict,则无需担心排序问题。你知道吗
相关问题 更多 >
编程相关推荐