【问题标题】:why the computed method work on only one record?为什么计算方法只适用于一条记录?
【发布时间】:2019-12-15 02:00:41
【问题描述】:

我做了这种方法,它计算员工的迟到时间,并在工资单上提交的奉献天数转换它,它工作得很好,但是当有多个工资单时,我需要得到所有工资单的奉献字段的总和对于员工,它只给我一条记录并返回其他记录 = 0.00 , 方法在这里

@api.multi
@api.depends('date_to','date_to','employee_id')
def compute_amount(self):
    for rec in self:
        rec.attend = self.env['hr.attendance'].search(
            [('check_in', '>=', rec.date_from), ('check_out', '<=', rec.date_to),
             ('employee_id', '=', rec.employee_id.id), ])
        late=[float(s.late) for s in rec.attend]
        tot_late= float(sum(late))
    rec.dedication = tot_late / 8
    pass

dedication = fields.Float(string="Dedication",  required=False,compute=compute_amount )

如果我尝试打印所有记录,我会得到一个像这样的列表 [0.0, 0.0, 1.7551388888888888] 如果有 3 张工资单,则该列表仅返回一条真实值的记录,其他记录 = 0

任何帮助都会得到帮助

【问题讨论】:

  • pass 是干什么用的?你在用什么图书馆?请分享所有相关代码和数据。请参阅:minimal reproducible example
  • 更正pass前行的缩进。
  • @AlexanderCécile 这是 odoo 框架,亲爱的,我在标签中说

标签: python python-2.7 for-loop orm odoo


【解决方案1】:

这可能是因为rec.dedication = tot_late / 8for rec in self 循环之外。这意味着该值仅设置在它计算的最后一条记录上。 另外,这里的 pass 值似乎是不必要的。

【讨论】:

    猜你喜欢
    • 2013-04-20
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    相关资源
    最近更新 更多