将python函数添加到特定动作odoo
Posted
技术标签:
【中文标题】将python函数添加到特定动作odoo【英文标题】:add python function to specific action odoo 【发布时间】:2020-01-06 13:02:27 【问题描述】:我想将此函数添加到动作“hr_holidays.open_allocation_holidays”中,以使“holiday_status_id”字段每次根据“employee_id”动态变化
@api.onchange('employee_id')
def change_leave_type(self):
for holiday_type in self:
if holiday_type.env.uid == holiday_type.user_id.id and not holiday_type.env.user.has_group(
'hr_holidays.group_hr_holidays_user'):
allocate_type = holiday_type.env['hr.holidays.status'].search([('name', '=', 'Compensatory Days')]).id
return 'domain': 'holiday_status_id': [('id', '=', allocate_type)]
elif holiday_type.env.user.has_group(
'hr_holidays.group_hr_holidays_user') and not holiday_type.env.user.has_group(
'hr_holidays.group_hr_holidays_manager'):
ids = []
allocation_types = holiday_type.env['hr.holidays.status'].search([])
for allocate in allocation_types:
if allocate.name != 'Unpaid':
ids.append(allocate.id)
return 'domain': 'holiday_status_id': [('id', '=', ids)]
【问题讨论】:
【参考方案1】:您可以通过将 domain-get 函数添加到该字段的域来将生成的域传递给该字段。
@api.model
def _get_holiday_status_id_domain(self):
if self.env.uid == self.user_id.id and not self.env.user.has_group('hr_holidays.group_hr_holidays_user'):
allocate_type = self.env['hr.holidays.status'].search([('name', '=', 'Compensatory Days')], limit=1)
return [('id', '=', allocate_type.id)]
elif self.env.user.has_group('hr_holidays.group_hr_holidays_user') and not self.env.user.has_group('hr_holidays.group_hr_holidays_manager'):
allocation_types = self.env['hr.holidays.status'].search([('name', '!=', 'Unpaid')])
return [('id', 'in', allocation_types.mapped('id'))]
holiday_status_id = fields.Many2one(
comodel_name='hr.holidays.status',
string='Holiday Status',
domain=_get_holiday_status_id_domain,
# and your other settings
)
【讨论】:
您的解决方案非常好,域工作正常.....但仍然是一个问题,它会影响“离开请求”操作和“分配请求”操作(因为它们加载相同的视图 具有相同的外部ID) 非常感谢 如果只需要改变分配的行为,只需要在hr_leave_allocation.py
下的HolidaysAllocation
类中加入域生成函数和domain=_get_holiday_status_id_domain
即可;如果将其添加到hr_leave.py
下的HolidaysRequest
类中,也会影响请假请求。
我使用 odoo 11 .....叶子模块中没有 HolidaysAllocation 类,只有 'hr.holidays' 类和 'hr.holiday.status' 类
你可以简单的在开头添加if
语句,在一定条件下返回[(1, '=', 1)]
,必须有一个字段告诉它是请假请求还是分配请求。
hr.holidays 模型中有 'type' 字段:type = fields.Selection([ ('remove', 'Leave Request'), ('add', 'Allocation Request') ])但它不适用于域功能以上是关于将python函数添加到特定动作odoo的主要内容,如果未能解决你的问题,请参考以下文章
将上下文菜单添加到特定的 Qtablewdiget 表列,Python
如何以编程方式将按钮添加到 gridview 并将其分配给特定的代码隐藏函数?