想在odoo中询问预期的单身人士错误。甚至香港专业教育学院用@ api.one修复它,我仍然对错误感到困惑,想知道我可以在没有@ api.one的情况下解决它吗?这是我的代码@ api.one:
class overtime_details(models.Model):
_name='overtime.overtime_details'
@api.onchange('employee_id')
@api.one
def attd_check(self):
#import pdb;pdb.set_trace()
for attds in self:
if attds.id:
ov = 0.0
attd = self.env['hr.attendance']
signin = attd.search([('name','=',self.overtime_id.start_date),
('employee_id','=', self.employee_id.id), ('action','=','sign_in')])
signout = attd.search([('name','=',self.overtime_id.end_date),
('employee_id','=',self.employee_id.id), ('action','=','sign_out')])
if signin:
if signout:
ov = self.env['overtime.overtime'].calc_overtime(self.overtime_id.start_date, self.overtime_id.end_date)
else:
ov = 0.0
else:
ov = 0.0
self.ovrtm = ov
nik = fields.Char('NIK', size=250, required=True)
overtime_id = fields.Many2one('overtime.overtime', string="Overtime", ondelete='cascade')
job_id = fields.Many2one('hr.job', string="Position")
employee_id = fields.Many2one('hr.employee', "Employee", required=True, select=True)
ovrtm = fields.Float(compute='attd_check', string='Overtime Hour(s)')
这里是使用odoo 8的追溯和iam:
File "C:\Program Files (x86)\Odoo 8.0\server\.\openerp\fields.py", line 825, i
n __get__
File "C:\Program Files (x86)\Odoo 8.0\server\.\openerp\models.py", line 5323,
in ensure_one
except_orm: ('ValueError', 'Expected singleton: overtime.overtime_details(2,
3, 4)')
我是odoo和python的新手,这是我第一次遇到这种错误,谢谢之前
答案 0 :(得分:4)
@api.one
表示@api.multi
表示多条记录时的记录。
如果是@api.multi
,您应该只使用for rec in self:
。在单个记录的情况下,您不需要使用for
,它只是没有意义。
错误消息显示预期的单身,这意味着:您正在使用记录集而不是记录,您没有发布错误日志,所以我只能猜测您需要从搜索结果中弹出单个记录。
祝你好运答案 1 :(得分:0)
在下面的代码中,有两个值在循环时出现,它似乎是重复或过度记录。因此,我将使用错误日志中显示的数据库ID检查记录。