Update_create создает новые фейлы вместо обновления общего количества
payments = list((expense
.annotate(month=Month('startDate'))
.values('month')
.annotate(total=Sum('cost'))
.order_by('month')))
for i in payments:
paymentMonths = (i["month"])
paymentTotal= (i["total"])
obj, created = Payment.objects.update_or_create(
author=curruser,
date=paymentMonths,
total = paymentTotal,
defaults={"total": paymentTotal},
)
totalcost = Payment.objects.filter(author = curruser.id)
Очевидно, он должен обновить (date = 12) total, но он создает новые с обновленным значением, это может быть потому, что totaldate отличается или, возможно, я ошибаюсь, это сбивает с толку
Я считаю, что вам просто нужно опустить total = paymentTotal
из ваших аргументов.
obj, created = Payment.objects.update_or_create(
author=curruser,
date=paymentMonths,
defaults={"total": paymentTotal},
)
Это происходит потому, что он запрашивает БД, чтобы узнать, существует ли уже платеж с такой суммой, и если нет, то создается новый. Вместо этого вы хотите запрашивать Платежи с curruser в качестве author
и с date в качестве paymentMonths
, обновляя total с новым paymentTotal