Подзапрос к родительской модели возвращает ошибку в 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]))

Но я получаю ошибку

Ошибка значения: Этот кверисет содержит ссылку на внешний запрос и может использоваться только в подзапросе.

Мой вопрос в том, можно ли сделать подзапрос к родительской модели? Или я делаю что-то не так?

Попробуйте этот способ

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))
Вернуться на верх