【问题标题】:Odoo: Inherit: Replace field conditionallyOdoo:继承:有条件地替换字段
【发布时间】:2015-09-03 12:24:48
【问题描述】:

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

我想做的是: 选中复选框时,将字段“名称”替换为另一个(选择)字段,但将值写入原始字段“名称”。

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

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

(在此代码中,字段“realman”是复选框。)

它在前端看起来是正确的,但是当我为字段“workcenter_naam”选择一个值并单击保存时,它给出了这个错误:

以下字段无效:名称

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

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

代替:

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

这是它在前端的样子:

它在前端的样子,就是它应该的样子。 在继承视图中选择的值,例如“Bakkerij”,只需放在名称字段中即可。

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

【问题讨论】:

    标签: python xml xpath odoo


    【解决方案1】:

    当您隐藏字段时“名称”是不可见的,但它仍然是必需的

    您可以保留这两个字段,但您应该删除 python 类的“名称”字段中的“必需”属性。最后将属性“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']
    

    【讨论】:

    • 你是对的。但是由于它给出了这个错误,我知道“workcenter_naam”的值没有传递给“name”字段。我希望我的字段覆盖字段“名称”,仅当 realman = true 时。
    • OK,那么你可以添加一个计算函数,将workcenter_naam的值存储在name字段中
    • 我现在已经解决了。很简单... @api.onchange('workcenter_naam') 并在函数中: self.name = self.workcenter_naam
    • 我编辑了我的答案以结束问题。检查是否正确,是否喜欢我添加的重置功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多