Как сделать поле Inputable на основе условия в ODOO 10? - PullRequest
0 голосов
/ 03 марта 2019

Я настраиваю регистрационную форму, где мне нужно получить значение поля 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 голосов
/ 04 марта 2019
Поле

compute в odoo по умолчанию readonly=True и store=False.Вы можете установить store=True, просто передав его в определение поля, но чтобы сделать поле compute не доступным для чтения / чтения, вы должны передать inverse в определении поля, которое является строковым значением, именем функциито есть, когда значение поля вычислений устанавливается вручную.Идея состоит в том, чтобы вычислить значение depends в поле, указанном в @api.depends decorator.Поэтому, если вы устанавливаете значение поля 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 ничего не делать.Это сделает вычислительное поле редактируемым.

...