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