I am currntly running Odoo v13 Community Edition. I am trying to edit the purchase order model by inheriting the model to my custom created model. I want to get the currency_rate field by using the env stuff. I still do not fully understand how it works so I tried to calculate the field (by using the code below) and I got a ZeroDivisionError (below the code)
I need help if anyone can tell me how do I search the env for the purchase order tied with the orderline and why do I get the ZeroDivisionError.
Thank you in advance
Here is the code:
class PurchOrderLine(models.Model):
_inherit = 'purchase.order.line'
x_price_unit = fields.Float(readonly=True, compute="calc_unit_p", string='Unit Price in EGP', store=False)
x_sub_tot = fields.Float(readonly=True, compute="calc_sub_t", string='Subtotal in EGP', store=False)
@api.depends('price_unit')
def calc_unit_p(self):
for p in self:
po = p.env['purchase.order'].search([])
p.x_price_unit = p.price_unit / po.currency_rate
@api.depends('price_subtotal')
def calc_sub_t(self):
for p in self:
if
po = p.env['purchase.order'].search([])
p.x_sub_tot = p.price_subtotal / po.currency_rate
And this is the Full Error:
Error:
Odoo Server Error
Traceback (most recent call last):
File "/opt/odoo/odoo/odoo/api.py", line 745, in get
value = self._data[field][record._ids[0]]
KeyError: <NewId 0x7f9aff5a7490>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/odoo/odoo/odoo/fields.py", line 1000, in __get__
value = env.cache.get(record, self)
File "/opt/odoo/odoo/odoo/api.py", line 751, in get
raise CacheMiss(record, field)
odoo.exceptions.CacheMiss: ('purchase.order.line(<NewId 0x7f9aff5a7490>,).x_price_unit', None)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/odoo/odoo/odoo/http.py", line 624, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/odoo/odoo/http.py", line 310, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/opt/odoo/odoo/odoo/tools/pycompat.py", line 14, in reraise
raise value
File "/opt/odoo/odoo/odoo/http.py", line 669, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo/odoo/odoo/http.py", line 350, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/odoo/odoo/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo/odoo/odoo/http.py", line 339, in checked_call
result = self.endpoint(*a, **kw)
File "/opt/odoo/odoo/odoo/http.py", line 915, in __call__
return self.method(*args, **kw)
File "/opt/odoo/odoo/odoo/http.py", line 515, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/odoo/addons/web/controllers/main.py", line 1322, in call_kw
return self._call_kw(model, method, args, kwargs)
File "/opt/odoo/odoo/addons/web/controllers/main.py", line 1314, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/opt/odoo/odoo/odoo/api.py", line 387, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/opt/odoo/odoo/odoo/api.py", line 374, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "/opt/odoo/odoo/odoo/models.py", line 6149, in onchange
value = record[name]
File "/opt/odoo/odoo/odoo/models.py", line 5684, in __getitem__
return self._fields[key].__get__(self, type(self))
File "/opt/odoo/odoo/odoo/fields.py", line 1024, in __get__
self.compute_value(recs)
File "/opt/odoo/odoo/odoo/fields.py", line 1109, in compute_value
records._compute_field_value(self)
File "/opt/odoo/odoo/odoo/models.py", line 3966, in _compute_field_value
getattr(self, field.compute)()
File "/opt/odoo/odoo/cust_addons/invoice/invoice.py", line 32, in calc_unit_p
p.x_price_unit = p.price_unit / po.currency_rate
ZeroDivisionError: float division by zero