Odoo Onchange 方法不更新 select 字段
Odoo Onchange method doesn't update select field
我在员工和部门表单中有两个选择框字段。我想根据员工的 department_id.
选择员工时自动选择部门
这是我的 .py 代码 (Odoo 11)
class HrExpenseExpense(models.Model):
_inherit = "hr.expense"
department_expense_group = fields.Selection(
string='Department Expense Group',
related='department_id.expense_group',
readonly=True,
)
department_id = fields.Many2one('hr.department', string='Department',
states={'post': [('readonly', True)], 'done': [('readonly', True)]})
@api.onchange('employee_id')
def onchange_employee_id(self):
department_id = [x.id for x in self.employee_id.department_id]
return {'domain': {'department_id': [('id', 'in', department_id)]}}
和xml查看文件:
<xpath expr="//field[@name='employee_id']" position="after">
<field name="department_expense_group" invisible="1" />
<field name="department_id" invisible="0"/>
</xpath>
它在工作,但问题是这个;当我选择一名员工时,部门选择框会自动更新,它会触发但不会自动选择。单击后选择框的列表填充。必须根据员工选择自动选择。
您只是更改字段 department_id
的过滤器,并且必须自行设置才能满足您的要求。你在一个记录字段 (employee_id.department_id
) 上循环,这在这里有点夸张。
@api.onchange('employee_id')
def onchange_employee_id(self):
if self.employee_id:
department = self.employee_id.department_id
# set department
self.department_id = department
# don't allow other departments
return {'domain': {'department_id': [('id', '=', department.id)]}}
else:
# empty department
self.department_id = False
# allow other departments
return {'domain': {'department_id': [('id', '!=', False)]}}
我在员工和部门表单中有两个选择框字段。我想根据员工的 department_id.
选择员工时自动选择部门这是我的 .py 代码 (Odoo 11)
class HrExpenseExpense(models.Model):
_inherit = "hr.expense"
department_expense_group = fields.Selection(
string='Department Expense Group',
related='department_id.expense_group',
readonly=True,
)
department_id = fields.Many2one('hr.department', string='Department',
states={'post': [('readonly', True)], 'done': [('readonly', True)]})
@api.onchange('employee_id')
def onchange_employee_id(self):
department_id = [x.id for x in self.employee_id.department_id]
return {'domain': {'department_id': [('id', 'in', department_id)]}}
和xml查看文件:
<xpath expr="//field[@name='employee_id']" position="after">
<field name="department_expense_group" invisible="1" />
<field name="department_id" invisible="0"/>
</xpath>
它在工作,但问题是这个;当我选择一名员工时,部门选择框会自动更新,它会触发但不会自动选择。单击后选择框的列表填充。必须根据员工选择自动选择。
您只是更改字段 department_id
的过滤器,并且必须自行设置才能满足您的要求。你在一个记录字段 (employee_id.department_id
) 上循环,这在这里有点夸张。
@api.onchange('employee_id')
def onchange_employee_id(self):
if self.employee_id:
department = self.employee_id.department_id
# set department
self.department_id = department
# don't allow other departments
return {'domain': {'department_id': [('id', '=', department.id)]}}
else:
# empty department
self.department_id = False
# allow other departments
return {'domain': {'department_id': [('id', '!=', False)]}}