fastapi-cache
fastapi-cache copied to clipboard
Serialize to type hinted response type first?
See here:
https://sqlmodel.tiangolo.com/tutorial/fastapi/relationships/#models-with-relationships
My example code
class StrategyWithPortfolios(StrategyWithCategory):
portfolios: list[Portfolio] = []
@router.get("/all")
@cache(expire=60)
async def read_strategies(
session: Session = Depends(get_session),
) -> list[StrategyWithPortfolios]:
"""
get all Strategy
"""
stmt = (
session.query(Strategy)
.options(
joinedload(Strategy.portfolios).options(joinedload(Portfolio.investors))
)
.options(joinedload(Strategy.category).load_only(Category.name))
)
ret = stmt.all()
ret = [StrategyWithPortfolios.model_validate(r) for r in ret] # very important!!!!!
return ret
The returned result is sqlalchemy orm class Strategy
but the data structure I want to return is StrategyWithPortfolios
.
The code works well without the line ret = [StrategyWithPortfolios.model_validate(r) for r in ret]
and @cache(expire=60)
.
But if I add @cache(expire=60)
it save fields only belong to Strategy
not portfolios
nor Category
to redis.
Please serialize the returned result to given pydantic model before save it to backend.