3

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

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:

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

4

0 回答 0