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