如何根据另一个字段的值将字段的属性设置为required = True或required = False?

时间:2017-02-08 16:22:53

标签: odoo-8 required-field

我在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

1 个答案:

答案 0 :(得分:1)

预期所需属性将存储在数据库中,并不意味着即时计算。最好的办法是做客户端。如果您查看模型ir.model.fields,您会注意到必需字段存储在数据库中,并不打算进行计算。

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

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

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

字段other_field会出现在您的视图中,因为评估会在客户端进行。如果您需要包含一个用于评估的字段但不想显示它,则可以使其不可见。像这样。

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