Django ORM 聚合传递模型方法值

Django ORM pass model method value in aggregate

这是我的模型:

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')
        )

在我的例子中,我必须查询从 userrelated_name 的所有内容,这就是我在这里聚合模型方法的原因。

任何人都可以帮助我如何在聚合中传递这个 get_total 方法?

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

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

感谢您的帮助

你可以简单地这样做:

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')
    )

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

user_wise = request.user.user_bill.get_total()