Как сделать суммирование двух словарей с помощью агрегата в django, и показать это в HTML?
я новичок в django, не могли бы вы, эксперты, любезно помочь мне...
Итак, у меня есть два модуля, и в CBV's get_context_data они оба возвращают общую сумму, теперь я хочу сложить оба итога и отобразить их на моей HTML странице, я честно пробовал много вещей, но я всегда получаю ошибку.
вот мой views.py
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super().get_context_data(**kwargs)
today = datetime.datetime.now()
# Order.objects.filter(created_at__year=today.year, created_at__month=today.month)
context['expense1'] = Tracker.objects.filter(user=self.request.user)
context['Total1'] =(Body.objects.filter(user=self.request.user, pub_date__year=today.year, pub_date__month=today.month).aggregate(total=Sum(F('price') * F('quantity'))) , Sport.objects.filter(user=self.request.user, pub_date__year=today.year, pub_date__month=today.month).aggregate(total=Sum(F('price') * F('quantity'))))
return context
Итак, что я хочу, так это , тотал тела + тотал спорта, который является asgn к контексту "total1", и затем я хочу показать его в HTML
мой HTML файл вот как я отображаю общее количество,
Итого: {{Тотал1}}
Ваш код oneliner немного запутан, но я думаю, что понял, где вы допустили ошибку - агрегат возвращает dict с ключом в аргументе в качестве возвращаемого значения. Смотрите ниже:
body_total = Body.objects.filter(
user=self.request.user, pub_date__year=today.year, pub_date__month=today.month
).aggregate(total=Sum(F('price') * F('quantity')))['total']
sport_total = Sport.objects.filter(
user=self.request.user, pub_date__year=today.year, pub_date__month=today.month
).aggregate(total=Sum(F('price') * F('quantity')))['total']
# Note: this is a tuple, not a sum of the two, so check what you need :)
context['Total1'] = (body_total, sport_total)
# For total sum of two totals, just add them of course.
# It seems like this is what you need from the post, and not the
# line above.
context['Total1'] = body_total + sport_total
PS. код не протестирован. Я немного не уверен, что выражения F работают нормально (скорее всего да). Дайте мне знать, если есть какие-либо проблемы.