【问题标题】:Force field value if created from another action如果从另一个操作创建,则强制字段值
【发布时间】:2016-01-30 09:48:38
【问题描述】:

我有一个继承自“hr.employee”的模型,并且我有一个动作可以 只显示属于特殊部门的员工。

我希望该列表顶部的“创建”按钮允许我 在 hr.employee 中创建一条记录,其中部门字段已设置为该特殊部门。

当然还有另一个“创建”按钮,来自标准的“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 字段应该有一个默认值,而不改变标准动作的行为?

非常感谢大家。

马克

【问题讨论】:

    标签: openerp odoo-8 odoo-9


    【解决方案1】:

    你可以使用

    &lt;field name="context"&gt;{'department_id': 'special department'}&lt;/field&gt;

    现在,在创建 Patient 时,您可以在 create() 中从上下文中获取值并采取相应措施。

    【讨论】:

    • 谢谢,你让我走上了正确的道路 :-) 不过有一个技巧,因为我不知道部门 ID 并且必须搜索它。所以我找到了一个解决方案,我将在下面发布答案。
    【解决方案2】:

    根据 Jamin 的评论,这是我应用的完整解决方案:

    1) 为动作添加上下文。上下文将有一个名为 “create_as_patient”,即 True 或 False。

    <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”的员工操作 在其上下文中标记,新创建的员工将不会拥有 默认部门设置。
    • 另一方面,如果我从 我的 Patient 操作,标志将出现,默认 部门将被添加到新记录中。

    再次感谢 jamin 为我指明了正确的方向 :-)

    马克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2021-10-24
      • 2021-12-29
      相关资源
      最近更新 更多