¡BIENVENIDO AL FORO DE ODOO ARGENTINA!

BRINDAMOS UN ESPACIO A LA COMUNIDAD ARGENTINA DE ODOO PARA CENTRALIZAR EL DEBATE, COMPARTIR IDEAS, DESARROLLOS, Y FORMAR PARTE DE UNA COMUNIDAD QUE CRECE DÍA A DÍA

¿No estás registrado?  REGISTRATE

Se marcó esta pregunta
1 Responder
3292 Vistas

Al intentar actualizar un registro desde una clase a otra me genera un KeyError, en mi codigo tengo:

 

@api.depends('mode')

def _get_num_proceso(self):

for r in self:

year = fields.Date.today()

if r.mode == 'open':

ConsCA = self.env['test.cons'].search([])[-1].ConsCA

r.num_proceso = 'CA-CAB-00%d-%.4s' % (ConsCA,year)

ConsCA = ConsCA + 1

IncreaseCA = self.env['test.cons'].search([])[-1]

IncreaseCA.write({'ConsCA': ConsCA})

 

la idea es incrementar en 1 el campo que esta en el modelo test.cons segun la condicion ya que "mode" es un select con 7 opciones por lo que en "test.cons" hay 7 campos y un unico registro en el que de acuerdo al valor de "mode" se incrementara/actualizara el campo en aquel registro, obvio solo pongo el codigo resumido ya que lo demas es lo mismo variando solo el valor de "mode", espero alguien sepa como solucionar esto, aqui les dejo el error:

 

Traceback (most recent call last):

  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 638, in _handle_exception

    return super(JsonRequest, self)._handle_exception(exception)

  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 675, in dispatch

    result = self._call_function(**self.params)

  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 331, in _call_function

    return checked_call(self.db, *args, **kwargs)

  File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 101, in wrapper

    return f(dbname, *args, **kwargs)

  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 324, in checked_call

    result = self.endpoint(*a, **kw)

  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 933, in __call__

    return self.method(*args, **kw)

  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 504, in response_wrap

    response = f(*args, **kw)

  File "/usr/lib/python2.7/dist-packages/odoo/addons/web/controllers/main.py", line 885, in call_kw

    return self._call_kw(model, method, args, kwargs)

  File "/usr/lib/python2.7/dist-packages/odoo/addons/web/controllers/main.py", line 877, in _call_kw

    return call_kw(request.env[model], method, args, kwargs)

  File "/usr/lib/python2.7/dist-packages/odoo/api.py", line 679, in call_kw

    return call_kw_model(method, model, args, kwargs)

  File "/usr/lib/python2.7/dist-packages/odoo/api.py", line 664, in call_kw_model

    result = method(recs, *args, **kwargs)

  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 3830, in create

    record = self.browse(self._create(old_vals))

  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 3997, in _create

    self.recompute()

  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 5312, in recompute

    vals = rec._convert_to_write({n: rec[n] for n in ns})

  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 5312, in <dictcomp>

    vals = rec._convert_to_write({n: rec[n] for n in ns})

  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 5211, in __getitem__

    return self._fields[key].__get__(self, type(self))

  File "/usr/lib/python2.7/dist-packages/odoo/fields.py", line 873, in __get__

    value = record._cache[self]

  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 5559, in __getitem__

    value = self._recs.env.cache[field][self._recs.id]

KeyError: 12

 

En KeyError se va incrementando segun tantas veces se intente calcular el campo que depende de "mode" en el @api.depends al crear el registro en mi clase principal. Saludos.

Avatar
Descartar
Mejor respuesta

antes podes probar cambiando el primer search? porque el search puede traer valores o no traer nada. Y si no devuelve nada te va a dar error por como esta programada la función

 

Avatar
Descartar
Autor

Cambiar el search en que manera? No se si te refieras al dominio que en este caso lo pongo vacío xq necesito que me traiga todos los registros y hacer referencia en el último así haya sólo uno existente en este caso pero más adelante existirán más.