是否可以在Odoo 10中动态更改选择字段的值?

时间:2018-08-08 09:42:58

标签: odoo odoo-10

我希望选择的内容取决于Char字段的值,例如,这样定义的Char字段:

my_char = fields.Char("Enter Something", readonly = False)

所以我想选择字段应该调用一个函数,例如“ _get_value”

my_selection = fields.Selection(selection = ' _get_value')
@api.model
def _get_value(self):
    my_list = [('key1','value1')]
    #no idea how to assign the value of my_char to value1
    return my_list

最终,随着用户在my_char中输入不同的字符串,我希望下拉列表中的选择有所不同。
在Odoo中可以实现吗?因为如果不是这样,我最好开始重新组织我的结构。非常感谢。

2 个答案:

答案 0 :(得分:0)

据我所知,字段类型Selection是不可能的。但是您可以使用Many2one字段来实现这种行为。

class MySelectionModel(model.Models):
    _name = "my.selection.model"

    name = fields.Char()

class MyModel(models.Model):
    _name = "my.model"

    my_char = fields.Char()
    my_selection_id = fields.Many2one(
        comodel_name="my.selection.model", string="My Selection")

    @api.onchange("my_char")
    def onchange_my_char(self):
        return {'domain': {'my_selection_id': [('name', 'ilike', self.my_char)]}}

或者没有onchange方法:

    my_selection_id = fields.Many2one(
        comodel_name="my.selection.model", string="My Selection",
        domain="[('name', 'ilike', my_char)]")

要使Many2one字段看起来像一个选择,请在表单视图的该字段上添加widget="selection"

域的外观应由您决定。这只是一个例子。

答案 1 :(得分:0)

无需在此处编写方法。只需将字典声明为变量,然后在选择字段中调用它即可。

VAR_LIST = [('a','ABC'),
            ('p','PQR'),
            ('x','XYZ')]

my_selection = fields.Selection(string="Field Name",VAR_LIST)