lunes, 6 de julio de 2015

_defaults en Odoo




Asignar valores por defecto a los atributos en Odoo


En el siguiente vídeo se da una explicación de como agregar valores por defecto a los atributos de nuestros objetos (modelos). este se realiza con la palabra reservada "_defaults", esta no es mas que un diccionario en el cual se le definen los atributos y los valores por defecto que queramos que obtenga al momento de crear un registro. ejemplo:


    



También se da un breve ejemplo de como cambiar la imagen por defecto que trae el formulario de res.company. para ello se escribió  el método "_get_logo". A través de la herencia y la asignación al atributo logo por "defaults" , en este método se construyo la ruta de la imagen que queríamos que res.company codificara por defecto. 



Aqui les dejo el video:


Espero les sea útil, este es un aporte de:

Jose Mancilla 
Correo: josedmancillam@gmail.com

3 comentarios:

  1. amigo pos casualidad tiene un ejemple de cr.execuete
    ya que al hacerlo me trae vacio

    @api.multi
    def _get_num_control(self, qry):
    user_id = self.env.user
    if self.suc == "PBL":
    self._cr.execute('SELECT nextval(''pbl'')')
    _res = cr.fetchall()[0]
    pre = "00-"
    PRUEBA = pre + _res
    elif user_id.suc == "CCS":
    PRUEBA="00-000002"
    elif user_id.suc == "LGU":
    PRUEBA="00-000003"
    else:
    raise ValidationError("no esta asociado a ninguna sucursal")
    return PRUEBA

    ResponderBorrar
  2. amigo pos casualidad tiene un ejemple de cr.execuete
    ya que al hacerlo me trae vacio

    @api.multi
    def _get_num_control(self, qry):
    user_id = self.env.user
    if self.suc == "PBL":
    self._cr.execute('SELECT nextval(''pbl'')')
    _res = cr.fetchall()[0]
    pre = "00-"
    PRUEBA = pre + _res
    elif user_id.suc == "CCS":
    PRUEBA="00-000002"
    elif user_id.suc == "LGU":
    PRUEBA="00-000003"
    else:
    raise ValidationError("no esta asociado a ninguna sucursal")
    return PRUEBA

    ResponderBorrar
    Respuestas
    1. Buenas tarde amigo, saludo de todo el equipo de JP,

      Analizando tu código, me pregunto.. tu requerimiento es llevar una secuencia de los registros de tu objeto?
      Si la respuesta es "si", Odoo te brinda un objeto llamado ir.sequence que es con el que se define la secuencia con sus prefijos y sufijos. en .xml lo defines y en .py lo ejecutas.

      Pero si lo llamas en el defaults, cada vez que abras la vista formulario se incrementara, lo que se traduce a que si no guardas el registro... el incremento es discontinuo..

      Para que el incremento sea continuo debes rescribir el método de tu objeto create, y dentro de él ejecutar el ir.sequence de tu objeto.

      en este link tienes un ejemplo pero con defaults:
      http://www.zbeanztech.com/blog/sequence-openerp

      Ejemplo de rescribir el metodo create

      def create(self,cr,uid,vals,context=None):

      comunicacion_obj=self.pool.get('name.tuobjeto')
      correlativo=self.pool.get('ir.sequence').get(cr,uid,
      'name.tuobjeto'),
      vals['correlativo']=correlativo[0]
      return=super(nametuClase,self).create(cr,uid,vals,
      context=context)

      Si tu respuesta es "no", te devuelve vació por que en tu definición del nextval, cuando definiste a pbl tiene algún detalle... o por que cuando haces el fetchall()[0] apuntas a su indice 0, te sugiero que apuntes luego del _res = cr.fetchall() _res[0],

      Espero te ayude.

      Borrar

"Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica. Esa fuerza es la voluntad"- Albert Einstein


Tú comentario nos ayuda a Mejorar..... Gracias!!!