0

是否可以使用 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')

返回相同的结果,但也令人惊讶地被增值税订购。

如果我更改 value 语句中的字段名称,则会引发错误。

4

2 回答 2

2

解决方案是使用 F 表达式:

paymentitem.objects.filter(payment=p).values(vat=F('item__vat_tax')).annotate(base=models.Sum('price')).order_by('vat')
于 2018-01-09T17:47:47.777 回答
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}]>
于 2020-11-25T09:36:27.330 回答