update_create 正在创建新字段而不是更新总计
update_create is creating new feilds instead of updating total
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 = paymentTotal
。
obj, created = Payment.objects.update_or_create(
author=curruser,
date=paymentMonths,
defaults={"total": paymentTotal},
)
这是因为它正在查询数据库以查看是否已存在具有该总数 的付款,如果不存在,它会创建一个新付款。相反,您想使用 curruser 作为 author
并使用 date 作为 paymentMonths
查询付款,同时只更新 总计与新的paymentTotal
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 = paymentTotal
。
obj, created = Payment.objects.update_or_create(
author=curruser,
date=paymentMonths,
defaults={"total": paymentTotal},
)
这是因为它正在查询数据库以查看是否已存在具有该总数 的付款,如果不存在,它会创建一个新付款。相反,您想使用 curruser 作为 author
并使用 date 作为 paymentMonths
查询付款,同时只更新 总计与新的paymentTotal