I'm trying to alter the content of a list view on FastAPI, depending on a get parameter. As the format is defined by a pydantic model, how can I customize it (or use an alternative model from within the view)?
Here's my view:
from fastapi_pagination import Page, Params, paginate
from pydantic import BaseModel
from sqlalchemy.orm import Session
class EventSerializer(BaseModel):
    id: str
    # ...
class EventAttendeeSerializer(BaseModel):
    id: str
    event: str  # contains the event UUID
    # ...
    class Config:
        orm_mode = True
@api.get("/", response_model=Page[EventAttendeeSerializer])
async def get_list(db: Session, pagination: Params = Depends(), extend: str = None):
    objects = db.query(myDbModel).all()
    if "event" in extend.split(","):
        # return EventSerializer for each object instead of id
    
    return paginate(objects, pagination)
At runtime, it would work like this:
GET /v1/event-attendees/
{
    "items": [
        {
            "id": <event_attendee_id>,
            "event": <event_id>,
        }
    ],
    "total": 1,
    "page": 1,
    "size": 50,
}
GET /v1/event-attendees/?extend=event
{
    "items": [
        {
            "id": <event_attendee_id>,
            "event": {
                "id": <event_id>,
                # ...
            }
        }
    ],
    "total": 1,
    "page": 1,
    "size": 50,
}
I searched for some kind of hooks in the pydantic and FastAPI docs and source code, but did not find anything relevant. Anyone can help please?
 
    