在 Django QuerySet.values 调用中为 dict 键起别名
Posted
技术标签:
【中文标题】在 Django QuerySet.values 调用中为 dict 键起别名【英文标题】:Aliasing the dict keys in a Django QuerySet.values call 【发布时间】:2014-10-14 22:48:40 【问题描述】:>>> ppcs.values('price', 'currency__currency_code')
['price': Decimal('562.00'), 'currency__currency_code': u'JPY']
当使用QuerySet.values
时,有没有办法将键名别名为其他名称?例如,不是显示直通关系currency__currency_code
的输出,而是如何将dict 键称为“货币”,如下面的输出:
>>> keys = ['price', 'currency']
>>> [dict(zip(keys, v)) for v in ppcs.values_list('price', 'currency__currency_code')]
['currency': u'JPY', 'price': Decimal('562.00')]
上述想法的问题在于,在这个阶段我不想要一个列表(也不是一个生成器对象),我希望输出保持为ValuesQuerySet
,就像第一个示例一样。
【问题讨论】:
code.djangoproject.com/ticket/16735 Django: rename items in values() 的可能副本 【参考方案1】:klasske 的评论完全回答了这个问题(谢谢) --> https://code.djangoproject.com/ticket/16735
简而言之,这里是 Django 1.8+ 的解决方案:
from django.db.models import F
ppcs.annotate(currency=F('currency__currency_code')).values('price', 'currency')
不幸的是,这在 Django v1.7 或更早版本中是不可能的。
我更喜欢票证中最初建议的以下语法,并且避免需要导入那个笨重的 F
对象,但没有骰子。
ppcs.values('price', currency='currency__currency_code')
【讨论】:
以上是关于在 Django QuerySet.values 调用中为 dict 键起别名的主要内容,如果未能解决你的问题,请参考以下文章
Django QuerySet values_list 返回未知字符
Django queryset values_list 是不是返回一个列表对象?