0

这是我的模型:

class Bill(models.Model):
    user =  models.OneToOneField(
        User,
        on_delete=models.CASCADE,
        related_name='user_bill'
    )
    flat_rent = models.DecimalField(
        max_digits=6,
        decimal_places=2,
        default=0.00
    )
    gas_bill = models.DecimalField(
        max_digits=6,
        decimal_places=2,
        default=0.00
    )

    # Also i have many such decimalField here that calculated in get_total
    ===========================================


    def get_total(self):
        total = self.flat_rent + self.gas_bill
        return total

我试图在get_total这里传递这个方法值:

user_wise = User.objects.filter(
            id=request.user.id
        ).aggregate(
            get_total=Sum('user_bill__get_total')
        )

就我而言,我必须从userwith查询所有内容related_name,这就是我在这里聚合模型方法的原因。

谁能帮助我如何get_total在聚合中传递这种方法?

我不想这样通过。Bill.objects.get(user__id=request.user.id).get_total

任何人都可以帮助实现这一目标吗?

谢谢你的帮助

4

1 回答 1

0

你可以简单地这样做:

from django.db.models import F, Sum

user_wise = Bill.objects.filter(
        user=request.user
    ).annotate(
        get_total=F('flat_rent') + F('gas_bill')
    ).aggregate(
        total=Sum('get_total')
    )

此外,由于它是 和 之间的OneToOne关系,因此您不需要像这样复杂的解决方案。您可以简单地使用:UserBill

user_wise = request.user.user_bill.get_total()
于 2020-05-08T05:05:25.787 回答