在Django QuerySet.values调用中别名字典键
>>> ppcs.values('price', 'currency__currency_code')
[{'price': Decimal('562.00'), 'currency__currency_code': u'JPY'}]
在使用 QuerySet.values
的时候,有没有办法把键名改成其他的名字?比如说,我不想让输出显示 currency__currency_code
这样的内容,而是想让字典的键叫做 'currency',就像下面的输出那样:
>>> 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
,就像第一个例子那样。
1 个回答
6
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 1.7或更早的版本中,这是不可能实现的。
我本来更喜欢在这个问题中最初建议的语法,这样就不需要导入那个笨重的F
对象,但没办法。
ppcs.values('price', currency='currency__currency_code')