我的代码有问题,问题是KeyError
,我花了几个小时但没有发现错误,KeyError:days_compensation_remaining
这是我的代码。
类和型号:
class HrEmployee(models.Model):
_inherit = 'hr.employee'
days_compensation_remaining = fields.Float(
'Jours de récupération restant',
compute='_compute_days_compensation_remaining',
readonly=True,
inverse='_inverse_days_compensation_remaining',
help='Nombre total des jours de récupération '
)
我的第一个功能:
@api.multi
def _inverse_days_compensation_remaining(self):
self.ensure_one()
days_compensation = self.company_id.days_compensation_holidays_status_id
if not compensation_legal_leave:
raise UserError(_("le type de congé pour les jours de récupération n'est pas défini"))
diff = self.days_compensation_remaining - compensation_legal_leave.get_days(
self.id)[compensation_legal_leave.id]['days_compensation_remaining']
如果差异大于0:
if diff > 0:
leave = self.env['hr.holidays'].create(
{
'name': 'Allocation for %s' % self.name,
'employee_id': self.id,
'holiday_status_id': compensation_legal_leave.id,
'type': 'add',
'holiday_type': 'employee',
'number_of_days_temp': diff
}
)
leave.action_approve()
if leave.double_validation:
leave.action_validate()
elif diff < 0:
raise UserError(_('vous ne pouvez pas réduire le nombre de jours'))
第二个功能:
@api.multi
def _compute_days_compensation_remaining(self):
for r in self:
compensation_legal_leave = r.company_id.days_compensation_holidays_status_id
if not compensation_legal_leave:
raise UserError(_("le type de congé pour les jours de récupération n'est pas défini"))
r.days_compensation_remaining = compensation_legal_leave.get_days(
r.id)[compensation_legal_leave.id]['days_compensation_remaining']
答案 0 :(得分:1)
您的代码没有什么错,但这是由于您收到的输入所致。很多时候我们没有得到想要的值,因此我们应该编写代码,以便当不存在键时,我们的代码也不会中断并按预期工作。
您应该使用let arr = [
{ size:4, girth:3},{size:5,girth:3.5},{size:6,girth:4}
];
const searchByGirth = (arr, girth) => (arr.find(e => e.girth === girth)||{size: 0}).size;
console.log(searchByGirth(arr, 3.5));
console.log(searchByGirth(arr, 9));
语法,即使密钥不存在,该语法也将帮助您完成操作;如果密钥不存在,则可以提供默认值。还有其他方法可以做到这一点,例如input_obj.get('key', default_value)
可以很好地解释here。