Como pasar valores por medio del atributo context de un campo en odoo

Como pasar valores por medio del atributo context de un campo en odoo

Atributo "context" en campo declarado en vista xml de odoo

·

3 min read

Ya que estamos encarrerados en el tema de odoo, hoy traigo un truquito que aunque es muy sencillo me pareció muy útil, pero antes de pasar de lleno a ver código como un animal primero déjenme contarles un poquito de qué va.

En mi modelo tengo un campo Many2one que apunta al modelo de res.partner (módulo de contactos) y bueno pues como bien sabemos un campo Many2one es un selector que al desplegarlo si se tienen los permisos correspondientes se nos permite crear nuevos registros en módulo correspondiente, en este caso "contactos".

carbon (5).png

Ahora la problemática a resolver es la siguiente: Cuando se crea un nuevo contacto quiero saber que tipo de contacto es, para lo cual tengo un campo "procedencia" el cual es un campo que solo se habilita en la creación de un contacto pero no en la edición, esto para evitar alterar la procedencia del contacto.

Para poder asignar un valor por defecto a este campo "procedencia" necesito saber desde donde se está creando el nuevo contacto. Es importante recordar que el registro se puede realizar desde el propio módulo o desde módulos que hagan referencia a este como se menciona al principio del post.

Para no hacer el cuento largo el problema lo resolví pasando valores a través del atributo context en el xml de la vista en la que se está declarando el campo que apunta a un módulo externo.

En la siguiente imagen se muestra mi campo Many2one declarado en la vista de mi módulo, y se puede notar que agregue el atributo context en el cual puedo pasar múltiples valores a manera de "diccionario", en este caso pase un solo valor.

carbon (6).png

Ahora lo siguiente es obtener este valor del lado del módulo relacionado. En este ejemplo es res.partner, para lo cual yo agregué un campo al cual nombre "llamado_modulo" y a este le asignó un valor por defecto obtenido de una función lambda en la cual solo estoy haciendo referencia al contexto desde donde se está haciendo referencia al propio módulo. En la siguiente imagen se aprecia mejor lo explicado con anterioridad, cabe mencionar que al obtener los valores pasados por contexto con la función get del contexto, si esta no encontrara la propiedad a la que se le está haciendo referencia se le puede enviar un valor por defecto, en el ejemplo se le asigna el valor False.

context_get.png

Finalmente podemos hacer las validaciones necesarias utilizando el campo "llamado_modulo" ya que al hacer todo esto ya debería tener el valor que le pasamos por contexto (ANYTHING) y en caso de no pasarle nada entonces por defecto debería tener un False.

Conclusión

Pasar valores por contexto es muy similar a pasar argumentos en el llamado de una función, y es muy útil para poder obtener información específica desde un módulo diferente, en este caso para saber desde donde se está ejecutando una acción. Espero que a alguien le sirva este pequeño tutorial. Sin más por el momento me despido pero no sin antes dejarles una frase que me robé de algún lado:

"The only person you are destined to become is the person you decide to be."

-Ralph Waldo Emerson