如果从另一个操作创建,则强制字段值

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 为我指明了正确的方向:-)

马克