Чтобы объяснить, почему вы получаете эту ошибку, давайте начнем шаг за шагом:
1 - для значения по умолчанию используйте decorator api.model
, а если у вас есть идентификатор, не используйте поиск, используйте browse self.env['some.model'].browse(id)
, но в вашем случае вам это вообще не нужно, просто сделайте это:
student_id = fields.Many2one('res.users', 'Etudiant',
readonly=True, required=True,
default=45 )
2- onchange
также способ установки значения по умолчанию , но только в представлении , поскольку они в первую очередь запускаются клиентской стороной после загрузки значений по умолчанию, ожидается, что метод onchange вернет либо None
, либо dictionary
, и именно поэтому вы получаете сообщение об ошибке, AttributeError: 'int' object has no attribute 'get'
, потому что возвращаемое значение не None
, поэтому odoo пытается получить некоторые ожидаемые значения из словаря (например: domain
, values
), но, к сожалению, вы вернули int, а не словарь, и поэтому Odoo выдает эту ошибку.
В методе onchage просто установите значение непосредственно в записи self
:
student_id = fields.Many2one('res.users', 'Etudiant',
readonly=True, required=True,
default=45)
@api.onchange('projet_terminer_id')
def choice_student(self):
self.student_id = self.env['res.users'].sudo().browse(45)
Исходя из вашего кода, я думаю, вы можете оставить onchange
, если хотите сбросить значение student_id
каждый раз, когда вы меняете projet_terminer_id
поле.