django – 如何重命名带注释的查询的字段?
发布时间:2020-12-20 11:28:54 所属栏目:Python 来源:网络整理
导读:我有以下查询 a = Mainfee.objects.values('collected_by__username'). distinct().annotate(Sum('amount')) 结果看起来像这样 [{'collected_by__username': u'maindesk','amount__sum': 800}] 如何将第一个键重命名为b,将第二个键重命名为b? 我尝试了以下
我有以下查询
a = Mainfee.objects.values('collected_by__username'). distinct().annotate(Sum('amount')) 结果看起来像这样 [{'collected_by__username': u'maindesk','amount__sum': 800}] 如何将第一个键重命名为b,将第二个键重命名为b? 我尝试了以下内容 m = Mainfee.objects.extra(select = {'a':'collected_by__username'}).values('a').distinct(). annotate(Sum('amount')) 收到了这个 DatabaseError: no such column: collected_by__username 我也试过了 m = Mainfee.objects.extra(select = {'a':'collected_by__username'}).values('collected_by__username').distinct(). annotate(Sum('amount')) 得到了 [{'collected_by__username': u'maindesk','amount__sum': 800}] PS:我也想重命名第二个字段 解决方法
您可以使用关键字参数更改带注释值的字典键:
m = Mainfee.objects.values('collected_by__username').annotate(b=Sum('amount')) [{'collected_by__username': u'maindesk','b': 800}] 但是,没有快速简便的方法来重命名相关字段.你可以用Python转换它,但你必须问自己这是否真的有必要: m = Mainfee.objects.values('collected_by__username').annotate(b=Sum('amount')) m = [{'a': x['collected_by__username'],'b': x['b']} for x in m] 或者这可能稍快一点: m = Mainfee.objects.values_list('collected_by__username').annotate(Sum('amount')) m = [{'a': x[0],'b': x[1]} for x in m] 这两种方法当然都会强制评估整个查询集,并且不允许通过queryset的方法进一步过滤/排序等. 另请注意,当您将values()或values_list()与annotate()一起使用时,对distinct()的调用是多余的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |