Я не знаю, поможет ли это вам, но вы не можете вызвать метод в api.multi
, пока вы не были сохранены первыми, но вы можете работать вокруг него, используя вместо этого api.model
, а в вызове функции просто передайте идентификаторзапись в параметре.
MyModel.call(
'my_method', {'current_rec': current_id})
В вашем python обрабатывать режим создания
@api.model
def my_method(self, current_rec=None):
if not current_rec:
# in create mode
# if you need a field from the view you need to pass its value in params like the id
# because self is a dummy record that is empty not like in onchange event
# because odoo build that dummy record for you from the values that they
# are in the current view.
else:
rec = self.browser(current_rec)
# remember value in api.multi or in rec are retrieved from the database
# not the current view values so if you relay on a value from the view
# pass it in params or find a way to tell odoo to build a dummy record like in onchange.
return result
Проблема здесь self пуста (в режиме создания), не как в методе onchange.
но вы всегда можете передать дополнительные параметры, которые вы можете получить из текущего представления, и передать их методу, если они необходимы в вашей логике.
И не забывайте, используете ли выполе в вашей логике, в api.multi
вы используете значения, извлеченные из базы данных, а не значения, которые они есть в текущем представлении (в режиме редактирования).