是否可以使用for group by子句重命名嵌套字段?
此查询:
paymentitem.objects.filter(payment=p).values('item__vat_tax').annotate(base=models.Sum('price')).order_by('item__vat_tax')
返回预期数据:
<QuerySet [{'base': Decimal('41.322'), 'item__vat_tax': 15}, {'base': Dec
imal('483.470'), 'item__vat_tax': 21}]>
我想将字段' item__vat_tax '重命名为' vat '。这个查询:
paymentitem.objects.filter(payment=p).extra(select={'vat': 'item__vat_tax'}).values('item__vat_tax').annotate(base=models.Sum('price')).order_by('vat')
返回相同的结果,但也被 vat 令人惊讶地排序。
如果我更改了value语句中的字段名称,则会引发错误。
答案 0 :(得分:1)
解决方案是使用F表达式:
paymentitem.objects.filter(payment=p).values(vat=F('item__vat_tax')).annotate(base=models.Sum('price')).order_by('vat')
答案 1 :(得分:0)
在Django中重命名注释值名称。如果我们使用Django F表达式,则可以轻松解决此问题。
from django.db.models import F
paymentitem.objects.filter(payment=p).values(vat=F('item__vat_tax')).annotate(base=models.Sum('price')).order_by('vat')
返回预期数据
<QuerySet [{'base': Decimal('41.322'), 'vat': 15}, {'base': Decimal('483.470'), 'vat': 21}]>