У меня есть две модели, которые работают следующим образом (для простоты):
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:
Просто чтобы прояснить ситуацию: эти две модели не являются моими реальными моделями, они являются чрезмерно упрощенными примерами того, чего я хочу достичь, и что я, по сути, хочу сделать НЕ выполнять арифметические действия между двумя полями, а скорее используйте метод модели в качестве поля для агрегатной функции (конечно, метод может выполнять более сложные действия, прежде чем возвращать значение), поэтому этот вопрос не является дубликатом другого вопроса.