ValueError:计算方法无法分配Python3 odoo

问题描述

我的代码中有三个计算函数。 但我得到了错误

odoo Server Error

Traceback (most recent call last):
  File "/vagrant/odoo/odoo/addons/base/models/ir_http.py",line 237,in _dispatch
    result = request.dispatch()
  File "/vagrant/odoo/odoo/http.py",line 682,in dispatch
    result = self._call_function(**self.params)
  File "/vagrant/odoo/odoo/http.py",line 358,in _call_function
    return checked_call(self.db,*args,**kwargs)
  File "/vagrant/odoo/odoo/service/model.py",line 94,in wrapper
    return f(dbname,**kwargs)
  File "/vagrant/odoo/odoo/http.py",line 346,in checked_call
    result = self.endpoint(*a,**kw)
  File "/vagrant/odoo/odoo/http.py",line 911,in __call__
    return self.method(*args,line 530,in response_wrap
    response = f(*args,**kw)
  File "/vagrant/odoo/addons/web/controllers/main.py",line 1359,in call_kw
    return self._call_kw(model,method,args,kwargs)
  File "/vagrant/odoo/addons/web/controllers/main.py",line 1351,in _call_kw
    return call_kw(request.env[model],kwargs)
  File "/vagrant/odoo/odoo/api.py",line 396,in call_kw
    result = _call_kw_multi(method,model,line 383,in _call_kw_multi
    result = method(recs,**kwargs)
  File "/vagrant/odoo/odoo/models.py",line 6165,in onchange
    value = record[name]
  File "/vagrant/odoo/odoo/models.py",line 5640,in __getitem__
    return self._fields[key].__get__(self,type(self))
  File "/vagrant/odoo/odoo/fields.py",line 979,in __get__
    raise ValueError("Compute method Failed to assign %s.%s" % (record,self.name))
Exception

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/vagrant/odoo/odoo/http.py",line 638,in _handle_exception
    return super(JsonRequest,self)._handle_exception(exception)
  File "/vagrant/odoo/odoo/http.py",line 314,in _handle_exception
    raise exception.with_traceback(None) from new_cause
ValueError: Compute method Failed to assign meeting.request(<NewId 0x7f4760a316d8>,).description

我在我的函数中分配了空值。
比如 self.request_srcmst_names = ''、self.date = ''、self.editable = False
但它仍然无法工作。不知道是哪个功能出错了。

class MeetingRequest(models.Model):

    _name = 'meeting.request'

    request_srcmst_names = fields.Char(compute=_compute_request_srcmst_names)
    date = fields.Date(compute=compute_date,search=search_date)

    @api.depends('request_srcmst_ids')
    def _compute_request_srcmst_names(self):
        self.request_srcmst_names = ''
        for record in self:
            name = []
            for request_srcmst in record.request_srcmst_ids:
                name.append(request_srcmst.meeting_srcmst_id.name)
            record.request_srcmst_names = ','.join(name)

    @api.depends('start_date')
    def compute_date(self):
        self.date = ''
        for record in self:
            if record.start_date:
                real_date = pytz.utc.localize(datetime.datetime.strptime(record.start_date,'%Y-%m-%d %H:%M:%s')).astimezone(pytz.timezone(config['timezone'])).date()
                record.date = real_date

class MeetingRequestSrcmst(models.Model):

    _name = 'meeting.request.srcmst'

    editable = fields.Boolean(compute=_compute_editable)

    def _compute_editable(self):
        self.editable = False
        for record in self:
            if record.hre_empbas_id.res_users_id.id == self.env.uid or record.create_uid.id == self.env.uid:
                record.editable = True

如何修复该功能?请给我一些建议。谢谢!

解决方法

我认为这是语法错误。您忘记在函数名称周围加上引号。计算出的函数名称应该在引号内 - compute='compute_date'。搜索功能也是如此。

就你而言,

naming

在计算字段的函数中,您可以删除:

hlookup