Как получить текущую запись в JavaScript в Odoo 10? - PullRequest
0 голосов
/ 15 ноября 2018

Кто-нибудь знает, как получить текущую запись в методе Python, который вызывается из кода JavaScript?

Давайте приведем пример:

У меня есть метод Python:

@api.multi
def my_method(self):
    _logger.info(self)

Чтобы вызвать этот метод из моего кода JS, я должен сделать следующее:

var MyModel = new Model('my.model');
MyModel.call(
    'my_method', [current_id],
)

И из-за этого мне нужно получить текущий идентификатор из JavaScript. Поэтому перед вызовом метода я сохраняю текущий идентификатор в переменной JS следующим образом:

var current_id = this.field_manager.datarecord.id

Работает нормально. Но только когда запись уже имеет идентификатор. Если текущая запись в настоящее время создается, this.field_manager.datarecord.id возвращает null , и вызов метода завершается неудачей.

Я хотел бы знать, как вызывать этот метод, даже если запись еще не имеет идентификатора. Например, onchange decorator позволяет работать в Python с записями, которые не хранятся в базе данных и, следовательно, еще не имеют идентификатора.

Есть идеи?

1 Ответ

0 голосов
/ 15 ноября 2018

Я не знаю, поможет ли это вам, но вы не можете вызвать метод в 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 вы используете значения, извлеченные из базы данных, а не значения, которые они есть в текущем представлении (в режиме редактирования).

...