如何使satusbar仅适用于特定状态Odoo13

问题描述

仅当我未单击“完成”或“取消”时,我才想使状态栏可单击。 如果状态为“完成”或“取消”,则我无权单击“草稿”或“ in_progres”。 我的代码的问题在于,无论状态如何,statusbar都不容易理解。

 <field name="state" nolabel="1" widget="statusbar"
                               statusbar_visible="draft,in_progress,done,canceled"
                               statusbar_colors="{'new':'blue'}"
                               attrs="{'clickable':[('state','not in',['done','canceled')]]}"
                               />

请帮忙吗? 谢谢。

解决方法

我有一个想法可以满足您的要求,所以首先,

您必须像这样在当前模型中创建一个字段,

clickable_bool = fields.Boolean(compute="_compute_clickable",string="Clickable?")

具有这种计算方法,

@api.multi
def _compute_clickable(self):
    for rec in self:
        if self.state not in ['done','canceled']:
            rec.clickable_bool = True
        else:
            rec.clickable_bool = False

现在转到您的xml文件,该文件的标头标记中包含您的状态字段。

像这样编辑它:-

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

<field name="state" nolabel="1" widget="statusbar"
                           statusbar_visible="draft,in_progress,done,canceled"
                           statusbar_colors="{'new':'blue'}"
                           options="{'clickable': '1'}"
                           attrs="{'invisible': [('clickable_bool','=',False)]}"
                           />

<field name="state" nolabel="1" widget="statusbar"
                           statusbar_visible="draft,canceled"
                           statusbar_colors="{'new':'blue'}"
                           attrs="{'invisible': [('clickable_bool',True)]}"
                           />

如果您对代码感兴趣,那么您将必须将状态设置为两个字段,或者根据您的布尔值,一个字段是不可见的,另一个字段是可见的。

随便问。