class Customer(models.Model):
pass
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='orders')
total_amount = models.DecimalField()
正如你所看到的,一个客户可以有很多订单。我想知道的是,到目前为止,一位客户花了多少钱。
qs = Customer.objects.get(pk=OuterRef('customer').orders.all().aggregate(total=Sum('total_amount))
Order.objects.annotate(customer_total=Subquery(qs.values('total')[:1]))
但我收到错误
ValueError:此查询集包含对外部查询的引用,只能在子查询中使用。
我的问题是,我们是否可以子查询父模型?或者我做错了什么?
尝试这种方式
from django.db.models import Sum
Order.objects.filter(customer__id=1).aggregate(Sum('total_amount'))
你的括号不太对。你需要先找到客户,然后拨打相关订单:
customer = Customer.objects.get(pk=OuterRef('customer'))
qs = customer.orders.all().aggregate(total=Sum('total_amount))
或一体化:
qs = Customer.objects.get(pk=OuterRef('customer')).orders.all().aggregate(total=Sum('total_amount))