>我创建了一个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 方法应返回None
或dictionary
,这就是为什么您得到和错误,AttributeError: 'int' object has no attribute 'get'
因为返回值不是None
所以 Odoo 试图从字典(如:domain
,values
(,但是哎呀你返回了一个整数而不是字典,这就是为什么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
。