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