DEV Community

Nahuel Segovia
Nahuel Segovia

Posted on

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 ;)

Discussion (0)