【问题标题】:How can I set the attribute of a field to required=True or required=False based on the value of another field?如何根据另一个字段的值将字段的属性设置为 required=True 或 required=False?
【发布时间】:2017-02-08 16:22:52
【问题描述】:

我在res.partner 模型中有一个选择字段employmentstatus,选项有employedunemployed。我想要另一个字段employmenttype 具有属性required=True 如果employmentstatus='employed'required=False,如果employmentstatus='unemployed'。该字段现在设置为 True 是否合作伙伴是 是否受雇(见附图here)。

这是我的代码:

from openerp.osv import osv, fields
from openerp import tools
class custom_fields_partner(osv.Model):
    _inherit = 'res.partner'
    _columns = {
        'employmentstatus' : fields.selection([
        ('employed','Employed'),
        ('unemployed','Unemployed')
        ],'Employment status', required=True, default='unemployed'),
        'employmenttype' : fields.selection([
        ('0','Public'),
        ('1','Private'),
        ('2','Mission')],'Nature of employment', required="fieldproperty"),
    }

    @api.one
    def fieldproperty(self):
        if self.employmentstatus == 'employed':
            return True
        else:
            return False

【问题讨论】:

    标签: odoo-8 required-field


    【解决方案1】:

    所需的属性应该存储在数据库中,而不是动态计算。最好的选择是在客户端进行。如果您查看模型 ir.model.fields,您会注意到必填字段存储在数据库中,并不意味着要计算。

    在您的 xml 中使用 attrs 属性。这是一个例子。

    <field name="field_name" attrs="{'required':[('other_field','=','other_value')]}"/>
    

    因此,在此示例中,仅当字段 other_field 的值为 other_value 时才需要名为 field_name 的字段,但您可以根据需要创建更复杂或更简单的域条件。

    字段other_field 必须出现在您的视图中才能使其工作,因为评估发生在客户端。如果您需要包含一个用于评估的字段但不想显示它,您可以使其不可见。像这样。

    <field name="other_field" invisible="1"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      相关资源
      最近更新 更多