filoquin.github.io

Odoo shell es tu amigo.

Odoo shell es tu amigo

Porque usar odoo Shell y no otros metodos.

Como ingresamos al shell de odoo.

En instalaciones planas o via virtual_env simplemente mediante el comando “odoo shell -d nombre_base_datos”

En docker depende la manera en que este construido pero…

# Ingreso al bash de docker
foo@bar:~$ sudo docker exec - it mi_docker bash
docker_id:~$ odoo shell - -no-http - d mi_db - c / opt/odoo/etc/odoo.conf - -db_host db - -db_password odoo - -db_user odoo
# O simplemente 
docker_id:~$ odoo shell -d nombre_base_datos

Manos a la obra.

Una ves adentro trabajo como si fuera el usuario super_admin.

Tengo disponibles todas las clases, objetos, modelos y datos, para transaccionar.

Cuando termino mi tarea, si quiero guardar los cambios, escribo self._cr.commit()

Un ejemplo.

En este ejemplo, una migracion fallida, dejo todas las imagenes en el modelo product.image y no en el modelo product.template. Yo quiero obtener la primer imagen por producto, insertarla en el modelo correcto y luego borrarla de product.image (para que no quede repetida)

self._cr.execute('select min(id), product_tmpl_id from product_image group by product_tmpl_id')
for images_id in self._cr.fetchall():
    product_id = self.env['product.template'].browse(images_id[1])
    image_id = self.env['product.image'].browse(images_id[0])
    product_id.image_1920 = image_id.image_1920
    image_id.unlink()
self._cr.commit()

¡Elegante!

Por ultimo cuando todo esta bien en mis tests, ejecuto esto en produccion desde un archivo:

odoo shell -d nombre_base_datos < mi_elegante_script.py