#python-2.7 #odoo-9
#python-2.7 #odoo-9
Вопрос:
В моем классе есть два поля выбора посещаемость и тип отпуска, когда присутствует посещаемость, тип отпуска должен быть доступен только для чтения, когда моя посещаемость отсутствует, поле выбора типа отпуска является обязательным, и я выбираю как отпуск по болезни, и я сохраняю запись, когда редактирую ту же запись, и я посещаюпомечается как присутствующее, значение поля типа leave должно быть ложным. Я задал поле только в false, но запись сохраняется в базе данных … может ли кто-нибудь помочь в этом
Это функция 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. leave_type — это поле выбора или логическое значение, какой вариант для leave_type
2. leave_type = поля. Выбор([(‘случайный отпуск’, ‘Случайный отпуск’), (‘больничный отпуск’, ‘Отпуск по болезни’), (‘заработанный отпуск’, ‘Заработанный отпуск’), (‘Отпуск по беременности и родам’, ‘Отпуск по беременности и родам’), (‘Отпуск по уходу за ребенком’, ‘Отпуск по уходу за ребенком’), (‘loss_of_pay’, ‘Потеря оплаты’)], sting=’Оставить тип’, только для чтения= True, состояния={‘черновик’: [(‘только для чтения’, False)]})
Ответ №1:
Я суммирую ваши замечания.
- Посещаемость = Присутствует, затем оставьте тип = Только для чтения.
- Посещаемость = False, затем оставьте тип = Обязательно.
- Вы сохраняете запись с посещаемостью = False и типом отпуска = Отпуск по болезни.(Это значение, сохраненное в БД).
- Теперь вы пытаетесь отредактировать эту запись. Изменение посещаемости = True, теперь тип оставления = Только для чтения. Таким образом, это поле не может быть обновлено с помощью метода onchange.
Если вы хотите обновить это значение поля, вам нужно сделать это в методе write.
@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
Я надеюсь, что это поможет.
Комментарии:
1. Я попробовал этот метод, и он мне помог, но единственная проблема, с которой я столкнулся, заключается в том, что значение leave становится false для всей записи, но я хочу, чтобы конкретная запись посещаемости была ложной… пожалуйста, помогите в этой ситуации… Спасибо
2. @api.multi def запись (self, vals): печать self, «SElf» печать vals, «vals» res = super(ManualAttendanceLine, self). напишите (vals), если vals.get(‘посещаемость’) и vals.get(‘посещаемость’) != (‘отсутствует’,’полдня’): self.leave_type = False # если vals.get(‘посещаемость’) и vals.get(‘посещаемость’) !=’half_day’: # self.leave_type = False, если vals.get(‘посещаемость’) и vals.get(‘посещаемость’) != ‘comp_off’: self.compensation_date = False возвращает значение