【问题标题】:Pass Values to One2many From Transient model - odoo 13 (wrong Value Error)将值从瞬态模型传递给 One2many - odoo 13(错误值错误)
【发布时间】:2020-02-26 09:25:56
【问题描述】:

型号:

 class AjaxTimesheet(models.Model):

    _name = "ajax.timesheet" 

timesheet_id = fields.Many2one(comodel_name='ajax.timesheet',string='Timesheet', compute='_compute_timesheet_id')

 @api.depends('created_by')
    def _compute_timesheet_id(self):
        # Compute Timesheet Id for given Timesheet
        for rec in self:
            rec.timesheet_id = rec._origin.id

瞬态模型:

 class TimesheetData(models.TransientModel):
        _name = "timesheet.data"
        _description = "Timesheet Data" 

time_task_ids = fields.One2many('ajax.timesheet','timesheet_id',string='Timesheet')



  @api.onchange('created_by','created_date')
            def on_change_created_by(self):

                # list the task in timesheet based on user
                task_ids = self.env['prj.task'].search([('task_assigned_to','=',self.created_by.id),
                                                        ('state','=','ongoing'),('child_ids','=',False)])
                task_list = []
                for task in task_ids:
                    timesheet = self.env['timesheet.timesheet'].search([('task_ids', '=', task.id)])
                    tot_time = 0
                    for i in timesheet:
                        tot_time += i.duration
                    tot_duration = task.task_planned_hours - tot_time
                    vals = {
                        'task_ids': task.id,
                        'created_date': self.created_date,
                        'created_by': self.created_by.id,
                        'prj_project_id':task.prj_project_id.id,
                        'planned_hour': task.task_planned_hours,
                        'task_deadline_date': task.task_deadline_date,
                        'balance_hour': tot_duration,
                        'ref_parent_id':  task.task_assigned_to.parent_id.id,
                    }
                    task_list.append((0, 0, vals))
                self.time_task_ids = task_list

这行错误:self.time_task_ids = task_list ValueError:ajax.timesheet.timesheet_id 的值错误:timesheet.data(,)

timesheet.data(,) - 我猜对象 ID 应该是 ajax.timesheet 模型的,但这里它来自 timesheet.data(,) 这就是错误是错误值的原因。解决此错误的任何解决方案。

错误: Odoo 服务器错误

Traceback (most recent call last):
  File "/home/guru/Documents/odoo-13/odoo/http.py", line 619, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/home/guru/Documents/odoo-13/odoo/http.py", line 309, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/home/guru/Documents/odoo-13/odoo/tools/pycompat.py", line 14, in reraise
    raise value
  File "/home/guru/Documents/odoo-13/odoo/http.py", line 664, in dispatch
    result = self._call_function(**self.params)
  File "/home/guru/Documents/odoo-13/odoo/http.py", line 345, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/home/guru/Documents/odoo-13/odoo/service/model.py", line 93, in wrapper
    return f(dbname, *args, **kwargs)
  File "/home/guru/Documents/odoo-13/odoo/http.py", line 338, in checked_call
    result = self.endpoint(*a, **kw)
  File "/home/guru/Documents/odoo-13/odoo/http.py", line 910, in __call__
    return self.method(*args, **kw)
  File "/home/guru/Documents/odoo-13/odoo/http.py", line 510, in response_wrap
    response = f(*args, **kw)
  File "/home/guru/Documents/odoo-13/addons/web/controllers/main.py", line 1320, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/home/guru/Documents/odoo-13/addons/web/controllers/main.py", line 1312, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/home/guru/Documents/odoo-13/odoo/api.py", line 395, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "/home/guru/Documents/odoo-13/odoo/api.py", line 382, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "/home/guru/Documents/odoo-13/odoo/models.py", line 6056, in onchange
    record._onchange_eval(name, field_onchange[name], result)
  File "/home/guru/Documents/odoo-13/odoo/models.py", line 5857, in _onchange_eval
    method_res = method(self)
  File "/home/guru/Documents/odoo-13/addons/ajax_timesheet/wizard/wizard_timesheet.py", line 98, in on_change_created_by
    self.time_task_ids = task_list
  File "/home/guru/Documents/odoo-13/odoo/fields.py", line 1068, in __set__
    self.write(new_records, value)
  File "/home/guru/Documents/odoo-13/odoo/fields.py", line 2758, in write
    return self.write_batch([(records, value)])
  File "/home/guru/Documents/odoo-13/odoo/fields.py", line 2782, in write_batch
    return self.write_new(records_commands_list)
  File "/home/guru/Documents/odoo-13/odoo/fields.py", line 3002, in write_new
    line[inverse] = record
  File "/home/guru/Documents/odoo-13/odoo/models.py", line 5598, in __setitem__
    return self._fields[key].__set__(self, value)
  File "/home/guru/Documents/odoo-13/odoo/fields.py", line 1068, in __set__
    self.write(new_records, value)
  File "/home/guru/Documents/odoo-13/odoo/fields.py", line 2467, in write
    cache_value = self.convert_to_cache(value, records)
  File "/home/guru/Documents/odoo-13/odoo/fields.py", line 2400, in convert_to_cache
    raise ValueError("Wrong value for %s: %r" % (self, value))
ValueError: Wrong value for ajax.timesheet.timesheet_id: timesheet.data(<NewId 0x7f498243af98>,)

【问题讨论】:

    标签: python-3.x python-2.7 odoo-11 odoo-12 odoo-13


    【解决方案1】:

    你必须这样做:

    new_record = self.env['ajax.timesheet'].create({
     //create record fields;
    })
    
    self.env.cr.commit()
    task_list.append(new_record.id)
    
    self.update({
        'time_task_ids': (6, 0, task_list)
    })
    self.env.cr.commit()
    

    因为您正在更新此字段 @api.onchange 的值。因此,当您想要更改模型字段的数据时,您必须根据您的场景使用更新或写入方法。

    这就是输入值的方式

    (0, 0, { values }) 链接到需要创建的新记录 使用给定的值字典

    (1, ID, { values }) 用 id = ID 更新链接记录(写 就可以了)

    (2, ID) 移除并删除 id = 的链接记录 ID(在 ID 上调用 unlink,这将完全删除对象,并且 还有链接)

    (3, ID) 切断与 id = ID 的链接记录的链接 (删除两个对象的关系但不删除 目标对象本身)

    (4, ID) 链接到 id = ID 的现有记录(添加一个 关系)

    (5) 取消所有链接(例如对所有链接使用 (3,ID) 记录)

    (6, 0, [IDs]) 替换链接 ID 列表(如使用 (5) 然后 (4,ID) 对于 ID 列表中的每个 ID)

    【讨论】:

    • value = self._data[field][record._ids[0]] TypeError: unhashable type: 'dict' @adam
    • 你照我说的做了?
    • 无变化兄弟
    • yestask_list.append((0, 0, vals)) self.update({ 'time_task_ids': [[6, 0, task_list]] }) self.env.cr.commit()
    • 听在这里,您正在使用带有某个模型的 one2many 字段,因此您必须在该模型中创建值并将创建的 id 附加到列表中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2019-12-02
    相关资源
    最近更新 更多