Odoo 12: AttributeError: у объекта 'int' нет атрибута 'get' - PullRequest
2 голосов
/ 07 февраля 2020

Я создал метод choice_student , в котором я возвращаю идентификатор по умолчанию для поля many2one, связанного с res.users, но получаю ошибку:

AttributeError: у объекта 'int' нет атрибута 'get'

Это мой код:

student_id = fields.Many2one('res.users', 'Etudiant', readonly=True, required=True, default=lambda self: self.choice_student()  )

@api.onchange('projet_terminer_id')
def choice_student(self):
    return self.env['res.users'].sudo().search([ ('id','=', 45)]).id

Ответы [ 2 ]

3 голосов
/ 07 февраля 2020

Чтобы объяснить, почему вы получаете эту ошибку, давайте начнем шаг за шагом:

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 поле.

3 голосов
/ 07 февраля 2020

Замените декоратор 'onchange' на 'model'

Также объявление поля.

Попробуйте использовать следующий код.

student_id = fields.Many2one('res.users', 'Etudiant', readonly=True, 
                             required=True, default=_default_choice_student)

@api.model
def _default_choice_student(self):
    return self.env['res.users'].sudo().search([('id','=', 45)]).id
...