¿Hay alguna manera de hacer lo siguiente?
from typing import Optional from fastapi import FastAPI from pydantic import BaseModel class Item(BaseModel): id: str name: str description: Optional[str] = None price: float tax: Optional[float] = None app = FastAPI() @app.post("/items/{item_id}") async def create_item(item: Item): return item Quiero tener el valor del parámetro de ruta item_id dentro del modelo Item .
¿Es posible?
Pydantic en FastAPI se usa para definir el modelo de datos. Puedes hacer lo siguiente:
from typing import Optional from fastapi import FastAPI from pydantic import BaseModel class Item(BaseModel): id: Optional[str] = None name: str description: Optional[str] = None price: float tax: Optional[float] = None app = FastAPI() @app.post("/items/{item_id}") async def create_item(item_id, item: Item): item.id = item_id return item Tenga en cuenta que la id se declara como opcional para evitar problemas de validación con los parámetros del cuerpo en la solicitud. Efectivamente, no vas a pasar el id en el cuerpo sino en el camino.
Si es necesario, también puede desacoplar la solicitud del modelo de respuesta (ver aquí ). Depende de lo que necesites.
Reemplace su id: str con id: Optional [str] = None
Reemplaza tu c reate_item (item: Item) con create_item (item_id, item: Item):
Agregue item.id = item_id debajo de su async . Obviamente, entonces dejas el artículo de devolución ruo.