построением запроса, а в какой момент нативный sum по релейшнам?
@hybrid_property
def balance(self) -> Decimal:
return sum((acc.balance for acc in self.accounts), start=Decimal("0"))
@balance.inplace.expression
@classmethod
def _balance_expression(cls) -> SQLColumnExpression[Decimal]:
return (
select(func.sum(SavingsAccount.balance))
.where(SavingsAccount.user_id == cls.id)
.label("total_balance")
)
Не до конца понимаю предназначение expression
питоновский sum будет выполнен когда обращаешься к полю экземпляра. То есть условный print(yourmodel.balance) SQL выражение будет сгенерировано когда ты попытаешься заюзать поле класс, то есть условный select(YourModelClass.balance)
но там же в expression filter по cls.id, откуда он возьмется если у нас нету экземпляра объекта.
cls.id к экземпляру не имеет отношения, это же класс
Обсуждают сегодня