DEV Community

Nahuel Segovia
Nahuel Segovia

Posted on

5 2

Actualizando los datos de un modelo en Django con un loop

Buenas... últimamente se me ocurrió empezar a documentar un poquito algunos de los problemas con los que me encuentro día a día. Quizás en algún momento vas a necesitar actualizar los datos de un modelo y no tenés ganas de andar escribiendo campo por campo. Acá dejo una función que realicé y terminó siendo bastante útil para el proyecto en el que estoy trabajando:

if request.POST['id']:
    post = Post.objects.get(id=request.POST['id'])
    try:
       for request_data_in_array in request.POST:
           request_post_values = request.POST[request_data_in_array]
           setattr(post, request_data_in_array, request_post_values)
           post.save()
Enter fullscreen mode Exit fullscreen mode

Los pasos/lógica que seguí es la siguiente:
_ Si existe id, buscamos un post con el id proporcionado

_ Recorremos la cantidad de datos proporcionados(en este caso son campos del modelo Post)

_ Una vez que los recorremos obtenemos el valor de cada uno adentro del loop. Esto lo hace cuando le solicitamos al objeto POST que nos traiga cada uno de los campos recibidos: < request.POST[request_data_in_array] > ahora a estos valores los tenemos dentro de una variable.

_ La función setattr(object, property_name, values) nos permite asignar valores a las propiedades de un objeto, tan solo es necesario pasarle la istancia del objeto al que queremos cambiar, el nombre de la propiedad y el valor. En este caso tenemos varias propiedades y varios valores para esas propiedades, entonces lo hacemos también dentro del loop para que lo haga con todos.

_ Una vez terminado podemos guardar con el método .save() y tendremos nuestro modelo actualizado ;)

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay