如何根据odoo 10中的条件使字段可输入?

时间:2019-03-03 14:37:08

标签: python odoo python-2.x

我正在设置注册表格,我需要根据选择选择将字段A的值输入字段B。

field_a = fields.Char("Field A")
field_b = fields.Char("Field B", compute="mymethod")
field_selection = fields.Selection([('choice_a', "Choice A"), ('choice_b', "Choice B")]) 


@api.one 
@api.depends('selection_choice')
def mymethod(self):
    for res in self:
        if res.selection_choice == 'choice_a':
            res.field_b = res.field_a
        else:
            res.field_b = ""

但仍显示在只读字段中,如何使其可输入?

1 个答案:

答案 0 :(得分:1)

默认情况下,odoo中的

compute字段是readonly=Truestore=False。您可以通过将store=True传递给字段定义来设置compute,但是要使inverse字段可输入/非只读,则必须在字段定义中传递depends,它是一个字符串值,手动设置计算字段值时要运行的函数的名称。这个想法是,在@api.depends装饰器中提到的字段上计算值compute。因此,如果您使用手动输入设置inverse字段值,则可能需要一个depends函数,该函数将相应地设置相应的field_a = fields.Char("Field A") field_b = fields.Char("Field B", compute="_compute_field_b", inverse="_set_field_b") field_selection = fields.Selection([('choice_a', "Choice A"), ('choice_b', "Choice B")]) @api.multi @api.depends('field_selection, field_a') def _compute_field_b(self): for res in self: if res.selection_choice == 'choice_a': res.field_b = res.field_a else: res.field_b = "" @api.multi def _set_field_b(self): for res in self: if res.field_selection == 'choice_a': res.field_a = res.field_b 字段。

inverse

如果在设置还原值时不需要任何return True功能,则可以{{1}}不执行任何其他操作。这将使计算字段可编辑。