在Django QuerySet.values调用中对dict键进行别名

时间:2014-08-21 10:29:25

标签: python django

>>> ppcs.values('price', 'currency__currency_code')
[{'price': Decimal('562.00'), 'currency__currency_code': u'JPY'}]

使用QuerySet.values时,有没有办法将键名别名别名?例如,如何显示通过关系currency__currency_code的输出,如何在下面的输出中创建名为'currency'的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,就像在第一个例子中一样。

1 个答案:

答案 0 :(得分: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 v1.7或更早版本中它是不可能的。

我更喜欢以下语法中最初建议的语法,并且无需导入那个笨重的F对象,但没有骰子。

ppcs.values('price', currency='currency__currency_code')