0
File "C:\Users\fadillah\Documents\server\odoo-16.0\odoo\models.py", line 5125, in ensure_one
    raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: hr.appraisal.goal.kr(123, 124)
def write(self, vals):
    result = super(HrAppraisalGoal, self).write(vals)
    for appraisal in self:
        if 'key_result_ids' in vals or 'goal_type' in vals:
            if appraisal.key_result_ids:
                if appraisal.goal_type == 'okr':
                    print(appraisal.key_result_ids.capaian)
                    total_capaian = sum(kr.capaian for kr in appraisal.key_result_ids)
                    appraisal.capaian = total_capaian / len(appraisal.key_result_ids)
                    print( appraisal.capaian)
                    
                    capaian = self.env['hr.appraisal.goal.kr'].search([('name', '=', appraisal.name)])
                    if capaian:
                        capaian.capaian = vals['capaian']
                        print(capaian.name,capaian.id)
            else:
                vals['capaian'] = 0.0
    return result

how can i solve this problem??

Ajeet Verma
  • 2,938
  • 3
  • 13
  • 24
Fadil
  • 1
  • 1

1 Answers1

0

The below code line return more than one value so you need to loop it to be able to update the values

capaian = self.env['hr.appraisal.goal.kr'].search([('name', '=', appraisal.name)])

Try this:

capaians = self.env['hr.appraisal.goal.kr'].search([('name', '=', appraisal.name)])
if capaians:
    for capaian in capaians:
        capaian.capaian = vals['capaian']
        print(capaian.name,capaian.id)
Waleed Mohsen
  • 965
  • 6
  • 8