从odoo中的其他模型调用方法和字段

时间:2017-03-06 08:40:40

标签: openerp odoo-8

这些是我的第一个模型,方法和字段

class overtime(models.Model):
   _name = 'overtime'

   def calc_overtime(self, start_date, end_date):
      #import pdb;pdb.set_trace()
      f = '%Y-%m-%d %H:%M:%S'
      d1 = datetime.strptime(start_date, f)
      d2 = datetime.strptime(end_date, f)
      timeDiff = d2-d1
      hours = float(timeDiff.total_seconds()/3600)
      return hours

   start_date = fields.Datetime('Start Date', required=True, default=lambda *a : time.strftime("%Y-%m-%d"+" "+"%H:%M:%S")
             , readonly=True, states={'draft': [('readonly', False)]})
   end_date = fields.Datetime('End Date', required=True, default=lambda *a : time.strftime("%Y-%m-%d"+" "+"%H:%M%S")
             , readonly=True, states={'draft': [('readonly', False)]})

这些是我的第二个模型,方法和领域

class overtime_details(models.Model):
    _name='overtime_details'


    def function(self):
        "calling calc_overtime"

    ovrtm = fields.Float('Overtime Hour(s)')

如何使用“self.pool.get”在超时详细信息类中调用calc_overtime方法,start_date和end_date作为参数 或“self.env”。并将结果作为ovrtm字段的值。先谢谢

1 个答案:

答案 0 :(得分:1)

我认为您不需要计算第一个类中的小时数,该函数应该在第二个类中,并添加一个One2many字段。

班级加班(models.Model):      _name ='加班'

 start_date = fields.Datetime('Start Date', required=True, default=lambda *a : time.strftime("%Y-%m-%d"+" "+"%H:%M:%S")
           , readonly=True, states={'draft': [('readonly', False)]})
 end_date = fields.Datetime('End Date', required=True, default=lambda *a : time.strftime("%Y-%m-%d"+" "+"%H:%M%S")
           , readonly=True, states={'draft': [('readonly', False)]})



class overtime_details(models.Model):
  _name='overtime_details'

 def compute_houres(self, start_date, end_date):
    d1 = self.overtime_id.end_date
    d2 = self.overtime_id.start_date
    f = '%Y-%m-%d %H:%M:%S'
    d1 = datetime.strptime(start_date, f)
    d2 = datetime.strptime(end_date, f)
    timeDiff = d2-d1
    hours = float(timeDiff.total_seconds()/3600)
    self.ovrtm = hours


  overtime_id = fields.Many2one('overtime', 'Réference', ondelete='cascade'),
  ovrtm = fields.Float(compute='compute_houres')