如果从另一个操作创建,则强制字段值
Force field value if created from another action
我有一个继承自 "hr.employee" 的模型,并且我有一个将
只显示特殊部门的员工。
我希望该列表顶部的 "Create" 按钮允许我
在 hr.employee 中创建一条记录,部门字段已设置为该特殊部门。
当然还有另一个 "Create" 按钮,来自标准 "hr" 模块,
不应为部门设置默认值。
这是模型:
# -*- coding: utf-8 -*-
from openerp import models, fields
class Patient(models.Model):
_inherit = 'hr.employee'
date_debut_contrat = fields.Date('Début Contrat de Prise en Charge')
date_fin_contrat = fields.Date('Fin Contrat de Prise en Charge')
动作如下:
<record id="action_liste_patients" model="ir.actions.act_window">
<field name="name">Patients</field>
<field name="res_model">hr.employee</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">[('department_id.is_patients', '=', 'true')]</field>
</record>
我是否可以通过该操作告诉 Odoo,department_id 字段应该具有默认值,而不更改标准操作的行为?
非常感谢大家。
马克
您可以使用
<field name="context">{'department_id': 'special department'}</field>
现在,在创建 Patient 时,您可以在 create() 中从上下文中获取值并采取相应的行动。
根据 Jamin 的评论,这是我应用的完整解决方案:
1) 为动作添加上下文。上下文将有一个名为
"create_as_patient",是对还是错。
<record id="action_liste_patients" model="ir.actions.act_window">
<field name="name">Patients</field>
<field name="res_model">hr.employee</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">[('department_id.is_patients', '=', 'true')]</field>
<field name="context">{'create_as_patient': True}</field>
</record>
2) 在我的模型的 create() 方法中,我从
上下文(如果存在)。然后我在 "hr.department" 模型中搜索
对于标记为患者默认部门的部门。
然后,如果找到默认部门,我设置新记录的
department_id到它。
# -*- coding: utf-8 -*-
from openerp import models, fields, api
class Patient(models.Model):
_inherit = 'hr.employee'
date_debut_contrat = fields.Date('Début Contrat de Prise en Charge')
date_fin_contrat = fields.Date('Fin Contrat de Prise en Charge')
@api.model
def create(self, vals):
if 'create_as_patient' in self.env.context:
if self.env.context['create_as_patient']:
departmentId = self.env['hr.department'].search([('is_patients', '=', True)], limit=1).id
if departmentId is not None:
vals['department_id'] = departmentId
record = super(Patient, self).create(vals)
return record
这符合我的要求:
- 来自没有 'create_as_patient' 的 Employee 操作
在其上下文中标记,新创建的员工将没有
默认部门设置。
- 另一方面,如果我从
我的耐心操作,标志将出现,并且默认
部门将添加到新记录中。
再次感谢 jamin 为我指明了正确的方向:-)
马克
我有一个继承自 "hr.employee" 的模型,并且我有一个将 只显示特殊部门的员工。
我希望该列表顶部的 "Create" 按钮允许我 在 hr.employee 中创建一条记录,部门字段已设置为该特殊部门。
当然还有另一个 "Create" 按钮,来自标准 "hr" 模块, 不应为部门设置默认值。
这是模型:
# -*- coding: utf-8 -*-
from openerp import models, fields
class Patient(models.Model):
_inherit = 'hr.employee'
date_debut_contrat = fields.Date('Début Contrat de Prise en Charge')
date_fin_contrat = fields.Date('Fin Contrat de Prise en Charge')
动作如下:
<record id="action_liste_patients" model="ir.actions.act_window">
<field name="name">Patients</field>
<field name="res_model">hr.employee</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">[('department_id.is_patients', '=', 'true')]</field>
</record>
我是否可以通过该操作告诉 Odoo,department_id 字段应该具有默认值,而不更改标准操作的行为?
非常感谢大家。
马克
您可以使用
<field name="context">{'department_id': 'special department'}</field>
现在,在创建 Patient 时,您可以在 create() 中从上下文中获取值并采取相应的行动。
根据 Jamin 的评论,这是我应用的完整解决方案:
1) 为动作添加上下文。上下文将有一个名为 "create_as_patient",是对还是错。
<record id="action_liste_patients" model="ir.actions.act_window">
<field name="name">Patients</field>
<field name="res_model">hr.employee</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">[('department_id.is_patients', '=', 'true')]</field>
<field name="context">{'create_as_patient': True}</field>
</record>
2) 在我的模型的 create() 方法中,我从 上下文(如果存在)。然后我在 "hr.department" 模型中搜索 对于标记为患者默认部门的部门。 然后,如果找到默认部门,我设置新记录的 department_id到它。
# -*- coding: utf-8 -*-
from openerp import models, fields, api
class Patient(models.Model):
_inherit = 'hr.employee'
date_debut_contrat = fields.Date('Début Contrat de Prise en Charge')
date_fin_contrat = fields.Date('Fin Contrat de Prise en Charge')
@api.model
def create(self, vals):
if 'create_as_patient' in self.env.context:
if self.env.context['create_as_patient']:
departmentId = self.env['hr.department'].search([('is_patients', '=', True)], limit=1).id
if departmentId is not None:
vals['department_id'] = departmentId
record = super(Patient, self).create(vals)
return record
这符合我的要求:
- 来自没有 'create_as_patient' 的 Employee 操作 在其上下文中标记,新创建的员工将没有 默认部门设置。
- 另一方面,如果我从 我的耐心操作,标志将出现,并且默认 部门将添加到新记录中。
再次感谢 jamin 为我指明了正确的方向:-)
马克