Muchas veces necesitamos establecer por defecto valores en los diferentes modelos de Odoo. Por ejemplo, en el caso de Paraguay queremos que por defecto todos los contactos creados tengan por defecto el país de Paraguay (sobre todo para hacer que el usuario seleccione la ciudad en lugar de ingresarla manualmente).
Bien, como hacemos eso? Se podría hacerlo con las herramientas disponibles en el modo desarrollador, pero la verdad es que el único modo sustentable de hacerlo es por medio de código. Y ello se logra con las siguientes líneas en el modelo res.partner
class ResPartner(models.Model):
_inherit = "res.partner"
@api.model
def default_get(self, fields):
res = super(ResPartner, self).default_get(fields)
if self.env.user.company_id.country_id.id == self.env.ref('base.py').id:
res.update(
{'country_id': self.env.ref('base.py').id}
)
return res
En este caso invocamos el método default_get. Este método se invoca antes de mostrarse el form, y se lo utiliza para realizar validaciones (algunas veces) y establecer valores por defecto (la mayoría de las veces). En este caso lo invocamos y controlamos que el país del usuario sea Paraguay. Esto lo hacemos utilizando el usuario del contexto y su compañía
self.env.user.company_id.country_id
Y controlamos que el mismo sea Paraguay, lo que se logra obteniendo el identificador externo base.py
self.env.ref('base.py')
Es mucho más seguro que controlar por el nombre del país ya que nunca falta el usuario que con espiritu entrepreneur cambia el nombre del país. Por último, se devuelve un diccionario de los valores a establecer por defecto
res.update(
{'country_id': self.env.ref('base.py').id}
)
return res
&