今天有群里的小伙伴咨询,一个字段是Selection类型,可能会有多个可选择的项目,但在某个界面中,不想用户选择全部可选项,只希望在某几个选项中选择。如果是Many2one字段,我们可以根据domain来过滤可选项,但Selection目前没有这个过滤功能,所以我自己加了一个js模块,来实现此需求。
首先我们来看一个字段的定义是这样子的:
lab_kind = fields.Selection([("ddtn",u"自检"),("rd",u"研发"),("external",u"外送")],string=u"检测方式",default="ddtn")
正常来看,用户是可以选择三个项目的任意一个,我在xml定义中加了一个属性值,如下:
<field name="lab_kind" required="1" opt_disable="rd,ddtn"/>
增加的opt_disabled是用来指定用户界面上哪几个项目不允许选择,多个项目值可以用逗号分隔。
打开操作界面,用户在编辑或新增时,看到的效果如下图:
前面两个选项会进行disabled,可以看到,但不可以选择。本来开始是想把不可选的项目过滤掉不显示,但考虑到有些字段的default值,或旧数据的值可能会是被过滤的值,如果不显示出来,可能会有错误,所以最终的效果改为不影响旧的记录,但新的资料不可以选择这样的效果。