使用方法作为聚合字段

时间:2016-07-06 06:40:20

标签: django django-queryset django-aggregation

我有两个模型如下(为简单起见):

class Bank(models.Model):
    name = models.CharField(max_length=250)


class Person(models.Model):
    bank = models.ForeignKey(Bank)
    savings = models.IntegerField()
    debts = models.IntegerField()

    def get_net_worth(self):
        return self.savings - self.debts

我想写一个让我知道银行人员“总净值”的方法,例如:

class Bank(models.Model):
    ...
    def get_net_worth(self):
        return self.person_set.all().aggregate(Sum('get_net_worth'))

但当然Django抱怨这样的领域不存在:

  

django.core.exceptions.FieldError:无法将关键字“get_net_worth”解析为字段。

有没有办法实现这一点,而无需在数据库中明确存储“净值”?

修改

万一你想知道,可以做到

def get_net_worth(self):
    person_queryset = self.person_set.all()
    return person_queryset.aggregate(Sum('savings'))['savings__sum'] - person_queryset.aggregate(Sum('debts'))['debts__sum']

但我必须以某种方式在每个“人物”上使用get_net_worth方法

编辑2:

只是为了澄清事情:这两个不是我的实际模型,它们是我想要实现的过度简化的例子,我基本上想做的事情不是在两个字段之间进行算术,而是使用模型的方法作为聚合函数的字段(当然一个方法在返回值之前可以做一些更复杂的东西),因此这个不是另一个的重复问题

0 个答案:

没有答案