2017-03-07 61 views
0

想问问回合预计单错误odoo。即使ive修复它与@ api.one,IAM仍然困惑布特的错误,并想知道我可以修复它没有@ api.one?这里是我的代码以@ api.one:预计单错误odoo

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)') 

IAM一个新手在odoo和Python这是我面临这样的第1次错误,前

+0

你能提供堆栈跟踪和odoo的版本吗? –

+0

@ api.model也可以工作,但你仍然需要一个装饰.. 更多地了解装饰。参阅下面的链接 [方法和装饰](http://odoo-new-api-guide-line.readthedocs.io/en/latest/decorator.html) –

+0

抱歉,IVE提供回溯错误。你们可以检查它 –

回答

4

@api.one感谢意味着记录时@api.multi意味着多个记录。 如果是@api.multi,则只能使用for rec in self:。在单条记录的情况下,您不需要使用for,这只是没有意义。

错误消息称预期单身,这意味着:您正在使用记录,而不是记录,你没有张贴错误日志,所以我只可以猜测,你需要从搜索结果中弹出一个记录。

祝你好运

+0

抱歉,香港专业教育学院提供的错误日志,你可以检查它现在 –

+0

注意这一点,当你将在自用'的记录:'避免单错误不要再次使用自己的这个'for'循环分配一个新的值,因为现在你的记录是'rec',而'self'是记录集 –

+0

是的,就像你说的一样,我找到了像dat这样的解决方案。感谢您的回答:) –