Odoo:继承:有条件地替换字段

时间:2015-09-03 12:24:49

标签: python xml xpath odoo

我想做一些我以前从未做过的事情,并且对如何解决它没有任何想法。

我想做的是: 选中复选框后,替换字段" name"使用另一个(选择)字段,但将值写入原始字段" name"。

这里的问题是当我用这样的替换继承:

<xpath expr="//field[@name='name']" position="replace">
            <field name="name" attrs="{'invisible': [('realman', '=', True)]}"/>                
            <field name="workcenter_naam" attrs="{'invisible': [('realman', '=', False)]}" required="1"/>
</xpath>

(在此代码中,字段&#34; realman&#34;是复选框。)

它在前端看起来是正确的,但是当我为字段选择一个值&#34; workcenter_naam&#34;然后单击“保存”,它会显示以下错误:

  

以下字段无效:名称

如果我更改字段的名称&#34; workcenter_naam&#34; to&#34; name&#34;在python文件中,它将始终使用该字段(而不是原始名称字段),与该复选框无关。像这样:

workcenter_naam = fields.Selection(_workcentername_selection, string="Workcenter naam")

而不是:

name = fields.Selection(_workcentername_selection, string="Workcenter naam")

这就是前端的样子: enter image description here

它在前端的样子是怎么回事。 在继承视图中选择的值,例如&#34; Bakkerij&#34;,只需要放在名称字段中。

有没有人知道如何解决这个问题?如果有任何不清楚的地方,请告诉我。

1 个答案:

答案 0 :(得分:0)

隐藏字段时,“名称”不可见,但仍然需要

您可以保留这两个字段,但是您应该删除python类的“name”字段中的“required”属性。最后将属性“required”添加到xml表单视图中,使其仅在特定视图中使用:

<field name="name" position="replace">
    <field name="name" attrs="{'invisible': [('realman', '=', True)]}" required="1"/>                
    <field name="workcenter_naam" attrs="{'invisible': [('realman', '=', False)]}" required="1"/>
</field>

或者你可以做你做过的事情:)

@api.onchange('workcenter_naam')
def onchange_workcenter_naam(self):
    self.name = self.workcenter_naam

我还会添加此功能(或类似功能)以重置“名称”字段

@api.onchange('realman')
def onchange_realman(self):
    if self.realman:
        self.name = self.workcenter_naam            
    else:
        self.name = ''
        self.workcenter_naam = self._defaults['workcenter_naam']