将瞬态模型中的值传递给One2many-odoo 13(错误值错误)



型号:

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

TransientModel:

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_listValueError: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>,)

你必须这样做:

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上的链接,这将完全删除对象,以及链接到它(

(3,ID(剪切到ID=ID的链接记录的链接(删除两个对象之间的关系,但不删除目标对象本身(

(4,ID(到ID为ID的现有记录的链接(添加关系(

(5( 取消所有链接(类似于对所有链接使用(3,ID(记录(

(6,0,[ID](替换链接ID的列表(类似于使用(5(则(4,ID(对于ID列表中的每个ID(

最新更新