Skip to content

Commit

Permalink
docs: mentioned workaround for using pydantic models along with other…
Browse files Browse the repository at this point in the history
… query params
  • Loading branch information
jd-solanki committed Dec 16, 2024
1 parent 132aac4 commit 900adb4
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 0 deletions.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 33 additions & 0 deletions docs/fastapi/dependencies.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,36 @@ Thanks to that you can have reusable pagination query parameters. This is minima
=== "Preview"

![fastapi_batteries__pagination_ss](../assets/images/examples/fastapi/dependencies/pagination_ss.png)

## Using with other query params

When you use Pydantic model schema along with other query params you'll get Pydantic model schema in request body which is wrong:

=== "Example"

```py hl_lines="12-13"
--8<-- "examples/fastapi/dependencies/fastapi_pydantic_model_n_query_param_issue__py313.py"
```

=== "Preview"

![fastapi_pydantic_model_n_query_param_issue](../assets/images/examples/fastapi/dependencies/fastapi_pydantic_model_n_query_param_issue.png)

This is limitation (or bug) from FastAPI. There's already [open issue](https://github.com/fastapi/fastapi/issues/12402) and [related discussions](https://github.com/fastapi/fastapi/issues/12402#issuecomment-2416720739) for this. However, we've nice workaround for [this](https://github.com/fastapi/fastapi/issues/12402#issuecomment-2520205504).

We just have to replace `Query()` with `Depends()` and it'll work as expected:

```diff
- pagination: Annotated[PaginationPageSize, Query()],
+ pagination: Annotated[PaginationPageSize, Depends()],
```

=== "Example"

```py hl_lines="12"
--8<-- "examples/fastapi/dependencies/fastapi_pydantic_model_n_query_param_issue_workaround__py313.py"
```

=== "Preview"

![fastapi_batteries__](../assets/images/examples/fastapi/dependencies/fastapi_pydantic_model_n_query_param_issue_resolved.png)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from typing import Annotated

from fastapi import FastAPI, Query

from fastapi_batteries.pydantic.schemas import PaginationPageSize

app = FastAPI()


@app.get("/items/")
async def get_items_page_size_pagination(
pagination: Annotated[PaginationPageSize, Query()],
q: str = "",
):
return {"q": q, "pagination": pagination}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from typing import Annotated

from fastapi import Depends, FastAPI

from fastapi_batteries.pydantic.schemas import PaginationPageSize

app = FastAPI()


@app.get("/items/")
async def get_items_page_size_pagination(
pagination: Annotated[PaginationPageSize, Depends()],
q: str = "",
):
return {"q": q, "pagination": pagination}

0 comments on commit 900adb4

Please sign in to comment.