Como sugerir valores por default en formularios de Odoo

7 de julio de 2023 por
Andres Dawidowicz
| Sin comentarios aún
 

Cuando ponemos "crear" en un formulario de Odoo, muchas veces necesitamos que algún valor lo sugiera por defecto. Por ejemplo que sugiera la fecha de hoy o el estado borrador. Para esto hay algunas alternativas.


Asignarle a un campo el valor por defecto


Esta parece la forma más drástica y sencilla al definir un campo de un modelo le asignamos el valor por defecto como en este ejemplo en donde defino el campo type_move de tipo Selection y le defino que cuando se creen un registro sugiera 'ingreso' o también para la moneda pesos en currency_in o el usuario actual en user_id:


type_move = fields.Selection(
selection=[("ingreso", "Ingreso"), ("gasto", "Gasto")],
string="Tipo",
default="ingreso", # al crear uno nuevo sugiere ingreso
required=True,
)

currency_id = fields.Many2one("res.currency", default=19)

user_id = fields.Many2one("res.users", string="Usuario", default=lambda self: self.env.user.id)


Asignarle al modelo una función en la cual se puede llenar los campos al crearse un registro


Podemos en el modelo crear una función default_get  con el decorador @api.model en el cual setear o darle valor a algunos campos como en este ejemplo en el cual cuando se crea un registro en el modelo account.move, que puede ser por ejemplo una factura, sugiera cierto diario de facturación. En el campo 'fields' que está en los parámetros que recibe la función está la lista de todos los campos del modelo y al ejecutar el res = super(), en el objeto res se pueden modificar los valores que se necesita

class AccountMove(models.Model):
_inherit = 'account.move'

@api.model
def default_get(self, fields):
res = super(AccountMove, self).default_get(fields)
journal_aux = self.env['account.journal'].search([('name', '=', 'Mayorista'), ('type', '=', 'sale')])
res['journal_id'] = journal_aux[0].id
return res ​ ​ ​


En la acción de ventana puedo definir el formulario a utilizar pasando un context con valores

Podría tener 2 opciones en el menú, las cuales llaman a una acción de ventana cada una y las 2 acciones de ventana utilizan el mismo formulario y en el context de cada acción de ventana puedo diferenciar y darle valor a algún/os campos por ejemplo una accion de ventana asigna el tipo de movimiento en ingreso y otra acción de ventana como egreso :

<field name="context">{'default_type_move':'ingreso'}</field>

<field name="context">{'default_type_move':'egreso'}</field>



Andres Dawidowicz 7 de julio de 2023
Compartir
Archivar
Identificarse dejar un comentario