>>> 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
,就像在第一个例子中一样。
答案 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')