在Django中,子查询父模型返回错误


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))

相关内容

  • 没有找到相关文章

最新更新