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
amigo pos casualidad tiene un ejemple de cr.execuete
ResponderBorrarya 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
amigo pos casualidad tiene un ejemple de cr.execuete
ResponderBorrarya 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
Buenas tarde amigo, saludo de todo el equipo de JP,
BorrarAnalizando 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.