Odoo 12:属性错误:'int'对象没有属性'get'



>我创建了一个choice_student方法,其中我返回与res.users相关的many2one字段的默认值中的ID,但是我收到错误:

属性

错误:"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

将"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

为了解释为什么会出现此错误,让我们逐步开始:

1-对于默认值,请使用装饰器api.model,如果您有ID不要使用搜索使用浏览self.env['some.model'].browse(id),但是在您的情况下,您根本不需要这样做,只需执行以下操作:

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

2-onchange也是设置默认值的一种方式,但仅在视图上,因为它们是加载默认值后客户端首先触发的,onchange 方法应返回Nonedictionary,这就是为什么您得到和错误,AttributeError: 'int' object has no attribute 'get'因为返回值不是None所以 Odoo 试图从字典(如:domainvalues(,但是哎呀你返回了一个整数而不是字典,这就是为什么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)

从您的代码外观来看,我认为如果您想在更改字段时重置student_id的值projet_terminer_id您可以保留onchange

最新更新