通过Django ORM重命名嵌套注释字段

通过Django ORM重命名嵌套注释字段,django,django-orm,django-annotate,Django,Django Orm,Django Annotate,是否可以使用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

是否可以使用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}]>
返回相同的结果,但令人惊讶的是,vat也订购了相同的结果


如果在value语句中更改字段名,则会引发错误

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

paymentitem.objects.filter(payment=p).values(vat=F('item__vat_tax')).annotate(base=models.Sum('price')).order_by('vat')

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

paymentitem.objects.filter(payment=p).values(vat=F('item__vat_tax')).annotate(base=models.Sum('price')).order_by('vat')

在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}]>

在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}]>


这个答案可能有帮助是的,它与F表达式一起工作。非常感谢。这个答案可能会有帮助。是的,它适用于F表达式。谢谢。