У меня есть две модели: профиль и оплата. И мне нужно показать на внешней стороне Datatable с полями «Имя пользователя», «Электронная почта» и «Всего потрачено». Имя пользователя и адрес электронной почты могут быть найдены в модели профиля, поэтому набор запросов будет иметь следующий вид:
def get_initial_queryset(self):
return Profile.objects.all()
Однако информацию «Всего потрачено» необходимо рассчитать как сумму всех полей payment_amount, найденных в модели оплаты. для того же "profile_id", так как пользователь может иметь два платежа (один с суммой = 5 и другой с суммой = 15, и мне нужно показать total_spent = 20).
Проблема в том, что я я использую Datatables, я NEED это поле "total_spent" должно быть в наборе запросов (с использованием Annotate или другого метода).
Я пытался использовать подзапрос и OuterRef, но я получаю ошибки в конечном сгенерированном SQL.
return Profile.objects.all().annotate(
money_spent=Subquery(
Payment.objects.filter(user_id__in=OuterRef('id')).annotate(
money_spent=Sum('amount')
),
output_field=CharField()
)
)
Но это дает мне SQL ошибку: (1241, «Операнд должен содержать 1 столбец (столбцы)»)
Как я могу получить правильный набор запросов?
Django Версия: 1.11 | Python Версия: 3.6.8