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