Поле
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
ничего не делать.Это сделает вычислительное поле редактируемым.