我在res.partner
模型中有一个选择字段,该字段employmentstatus
,其中的选项employed
或unemployed
.我想要另一个字段employmenttype
具有属性required=True
如果employmentstatus='employed'
或required=False
如果employmentstatus='unemployed'
.现在的字段将"必需"设置为 True,无论合作伙伴是否为受雇与否(见此处附图(。
这是我的代码:
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
必需属性应存储在数据库中,而不是动态计算。最好的办法是客户端做。如果您查看模型 ir.model.fields,您会注意到必填字段存储在数据库中,而不是用于计算。
在 xml 中使用 attrs 属性。下面是一个示例。
<field name="field_name" attrs="{'required':[('other_field','=','other_value')]}"/>
因此,在此示例中,仅当字段other_field
的值为 other_value
时,才需要名为 field_name
的字段,但您可以根据需要创建更复杂或更不复杂的域条件。
该字段other_field
mush 出现在您的视图中,以便使其正常工作,因为评估发生在客户端。如果需要包含用于评估的字段,但不想显示它,则可以使其不可见。喜欢这个。
<field name="other_field" invisible="1"/>