在进行调拨时遇到错误, stock.quant(12345,).product_uom_id
然后没有其他任何提示, 这种错误就比较难定位,到处打断点才定位到错误的位置,
odoo针对计算字段compute
,related
,为了提高读取速度,有做预处理,但是不知道为什么就这一条记录做了预处理就报错了
解决办法:
不要让他做预处理了,直接在product_uom_id 字段中添加store=Ture
属性.
def determine_value(self, record):
""" Determine the value of ``self`` for ``record``. """
env = record.env
if record.id==32045:
_logger.info('record:{},self{},self.store:{},self.compute:{},recursive:{}'.format(
record,self,self.store,self.compute,self.recursive))
if self.store and not (self.compute and env.in_onchange):
# this is a stored field or an old-style function field
if self.compute:
# this is a stored computed field, check for recomputation
recs = record._recompute_check(self)
if recs:
# recompute the value (only in cache)
if self.recursive:
recs = record
self.compute_value(recs)
# HACK: if result is in the wrong cache, copy values
if recs.env != env:
computed = record._field_computed[self]
for source, target in pycompat.izip(recs, recs.with_env(env)):
try:
values = {f.name: source[f.name] for f in computed}
target._cache.update(target._convert_to_cache(values, validate=False))
except MissingError as exc:
target._cache.set_failed(target._fields, exc)
# the result is saved to database by BaseModel.recompute()
return
# read the field from database
record._prefetch_field(self)
elif self.compute:
# this is either a non-stored computed field, or a stored computed
# field in onchange mode
if self.recursive:
self.compute_value(record)
else:
recs = record._in_cache_without(self)
if record.id == 32045:
_logger.info('recs:{},name:{}'.format(recs,recs.mapped('product_id.name')))
recs = recs.with_prefetch(record._prefetch)
self.compute_value(recs)
if record.id == 32045:
_logger.info('recs:{}'.format(recs))
else:
# this is a non-stored non-computed field
record.env.cache.set(record, self, self.convert_to_cache(False, record, validate=False))
标签:compute,错误,self,cache,CacheMiss,record,._,odoo,recs
From: https://www.cnblogs.com/qianxunman/p/17016163.html