如何通过odoo中的onchange来伪造字段值

how to false the field value by onchange in odoo

在我的class中有两个选择字段出勤和休假类型当有出勤时休假类型应该是只读当我缺席时请假类型选择字段是必需的并且我是选择病假并在我编辑同一条记录时保存记录并且我正在出勤标记为存在休假类型字段值应该假他们。我只给出了错误的字段,但记录保存在数据库中...任何人都可以帮助这个

这是 onchange 函数

@api.onchange('attendance', 'employee_id', 'attendance_date')
def onchange_attendance(self):
    if self.attendance:
        if self.attendance == 'present':

            time_in = time_out = False

            self.present = True
            self.absent = False
            self.half_day = False
            self.late = False
            self.comp_off = False
            self.leave_type = False
            self.holiday = False
            self.weekly_off = False
            self.compensation_date = False
        if self.attendance == 'absent':
            self.present = False
            self.absent = True
            self.half_day = False
            self.late = False
            self.comp_off = False
            self.holiday = False
            self.weekly_off = False
            self.compensation_date = False
        if self.attendance == 'half_day':
            self.present = False
            self.absent = False
            self.half_day = True
            self.late = False
            self.comp_off = False
            self.holiday = False
            self.weekly_off = False
            self.compensation_date = False
        if self.attendance == 'comp_off':
            self.present = False
            self.absent = False
            self.half_day = False
            self.late = False
            self.comp_off = True
            self.leave_type = False
            self.holiday = False
            self.weekly_off = False
        if self.attendance == 'holiday':
            self.present = False
            self.absent = False
            self.half_day = False
            self.late = False
            self.comp_off = False
            self.leave_type = False
            self.holiday = True
            self.weekly_off = False
            self.compensation_date = False
        if self.attendance == 'weekly_off':
            self.present = False
            self.absent = False
            self.half_day = False
            self.late = False
            self.comp_off = False
            self.leave_type = False
            self.holiday = False
            self.weekly_off = True
            self.compensation_date = False

我在总结你的观点。

  1. 出勤 = 出席然后请假类型 = 只读。
  2. 出勤 = False 然后请假类型 = 必填。
  3. 您正在保存出勤 = False 且请假类型 = 病假的记录。(这是保存在数据库中的值)。
  4. 现在您正在尝试编辑这条记录。更改出勤 = 真,现在请假类型 = 只读。所以这个字段不能使用onchange方法更新。

如果你想更新这个字段值,那么你必须在写入方法中进行。

@api.multi
def write(self, vals):
    res = super(*yourmodel*, self).write(vals)
    if vals.get('attendance') and vals.get('attendance') == 'present':
        self.leave_type = False
    return res

希望对您有所帮助。