fastapi-filters is a library that provides filtering/sorting feature for FastAPI applications.
pip install fastapi-filtersTo create filters you need either define them manually using create_filters function or automatically generate them based on model using create_filters_from_model function.
from typing import List from fastapi import FastAPI, Depends from pydantic import BaseModel, Field # import all you need from fastapi-filters from fastapi_filters import create_filters, create_filters_from_model, FilterValues app = FastAPI() # create FastAPI app class UserOut(BaseModel): # define your model name: str = Field(..., example="Steve") surname: str = Field(..., example="Rogers") age: int = Field(..., example=102) @app.get("/users") async def get_users_manual_filters( # manually define filters filters: FilterValues = Depends(create_filters(name=str, surname=str, age=int)), ) -> List[UserOut]: pass @app.get("/users") async def get_users_auto_filters( # or automatically generate filters from pydantic model filters: FilterValues = Depends(create_filters_from_model(UserOut)), ) -> List[UserOut]: passCurrently, fastapi-filters supports SQLAlchemy integration.
from fastapi_filters.ext.sqlalchemy import apply_filters @app.get("/users") async def get_users( db: AsyncSession = Depends(get_db), filters: FilterValues = Depends(create_filters_from_model(UserOut)), ) -> List[UserOut]: query = apply_filters(select(UserOut), filters) return (await db.scalars(query)).all()