docs/es/docs/tutorial/body-updates.md MARKDOWN 101 lines View on github.com → Search inside
1# Body - Actualizaciones { #body-updates }23## Actualización reemplazando con `PUT` { #update-replacing-with-put }45Para actualizar un ítem puedes utilizar la operación de [HTTP `PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT).67Puedes usar el `jsonable_encoder` para convertir los datos de entrada en datos que se puedan almacenar como JSON (por ejemplo, con una base de datos NoSQL). Por ejemplo, convirtiendo `datetime` a `str`.89{* ../../docs_src/body_updates/tutorial001_py310.py hl[28:33] *}1011`PUT` se usa para recibir datos que deben reemplazar los datos existentes.1213### Advertencia sobre el reemplazo { #warning-about-replacing }1415Esto significa que si quieres actualizar el ítem `bar` usando `PUT` con un body que contenga:1617```Python18{19    "name": "Barz",20    "price": 3,21    "description": None,22}23```2425debido a que no incluye el atributo ya almacenado `"tax": 20.2`, el modelo de entrada tomaría el valor por defecto de `"tax": 10.5`.2627Y los datos se guardarían con ese "nuevo" `tax` de `10.5`.2829## Actualizaciones parciales con `PATCH` { #partial-updates-with-patch }3031También puedes usar la operación de [HTTP `PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) para actualizar *parcialmente* datos.3233Esto significa que puedes enviar solo los datos que deseas actualizar, dejando el resto intacto.3435/// note | Nota3637`PATCH` es menos usado y conocido que `PUT`.3839Y muchos equipos utilizan solo `PUT`, incluso para actualizaciones parciales.4041Eres **libre** de usarlos como desees, **FastAPI** no impone ninguna restricción.4243Pero esta guía te muestra, más o menos, cómo se pretende que se usen.4445///4647### Uso del parámetro `exclude_unset` de Pydantic { #using-pydantics-exclude-unset-parameter }4849Si quieres recibir actualizaciones parciales, es muy útil usar el parámetro `exclude_unset` en el `.model_dump()` del modelo de Pydantic.5051Como `item.model_dump(exclude_unset=True)`.5253Eso generaría un `dict` solo con los datos que se establecieron al crear el modelo `item`, excluyendo los valores por defecto.5455Luego puedes usar esto para generar un `dict` solo con los datos que se establecieron (enviados en el request), omitiendo los valores por defecto:5657{* ../../docs_src/body_updates/tutorial002_py310.py hl[32] *}5859### Uso del parámetro `update` de Pydantic { #using-pydantics-update-parameter }6061Ahora, puedes crear una copia del modelo existente usando `.model_copy()`, y pasar el parámetro `update` con un `dict` que contenga los datos a actualizar.6263Como `stored_item_model.model_copy(update=update_data)`:6465{* ../../docs_src/body_updates/tutorial002_py310.py hl[33] *}6667### Resumen de actualizaciones parciales { #partial-updates-recap }6869En resumen, para aplicar actualizaciones parciales deberías:7071* (Opcionalmente) usar `PATCH` en lugar de `PUT`.72* Recuperar los datos almacenados.73* Poner esos datos en un modelo de Pydantic.74* Generar un `dict` sin valores por defecto del modelo de entrada (usando `exclude_unset`).75    * De esta manera puedes actualizar solo los valores realmente establecidos por el usuario, en lugar de sobrescribir valores ya almacenados con valores por defecto en tu modelo.76* Crear una copia del modelo almacenado, actualizando sus atributos con las actualizaciones parciales recibidas (usando el parámetro `update`).77* Convertir el modelo copiado en algo que pueda almacenarse en tu DB (por ejemplo, usando el `jsonable_encoder`).78    * Esto es comparable a usar el método `.model_dump()` del modelo de nuevo, pero asegura (y convierte) los valores a tipos de datos que pueden convertirse a JSON, por ejemplo, `datetime` a `str`.79* Guardar los datos en tu DB.80* Devolver el modelo actualizado.8182{* ../../docs_src/body_updates/tutorial002_py310.py hl[28:35] *}8384/// tip | Consejo8586Puedes realmente usar esta misma técnica con una operación HTTP `PUT`.8788Pero el ejemplo aquí usa `PATCH` porque fue creado para estos casos de uso.8990///9192/// note | Nota9394Observa que el modelo de entrada sigue siendo validado.9596Entonces, si deseas recibir actualizaciones parciales que puedan omitir todos los atributos, necesitas tener un modelo con todos los atributos marcados como opcionales (con valores por defecto o `None`).9798Para distinguir entre los modelos con todos los valores opcionales para **actualizaciones** y modelos con valores requeridos para **creación**, puedes utilizar las ideas descritas en [Modelos Extra](extra-models.md).99100///

Findings

✓ No findings reported for this file.

Get this view in your editor

Same data, no extra tab — call code_get_file + code_get_findings over MCP from Claude/Cursor/Copilot.

Generated by searchcode.com · powered by code_get_file + code_get_findings