odoo - объяснение @ api.multi - набор записей - PullRequest
0 голосов
/ 16 ноября 2018

В odoo v11, когда я использую декоратор @ api.multi, переменная self является фактическим набором записей.Но какие записи в этом наборе записей?

Например: В odoo я нажимаю на партнера.У партнера есть вычисляемое поле.Метод этого вычисляемого поля украшен @ api.multi.В этом наборе записей на 0-м месте есть запись, которую я хочу.Но почему существуют другие записи?

Я знаю, что делает @ api.one - перебирает набор записей и переопределяет переменную self в качестве текущего набора записей.

Я сталкиваюсь с этой проблемой, потому чтоЯ хочу заполнить поля с помощью вызова WebService из Navision в тот момент, когда я нажимаю на партнера.Итак, я определил временное поле, которое вычисляется методом.в этом методе я вызываю веб-сервис и обновляю четыре поля, которые я хочу показать.

какие-либо объяснения / предложения?

Спасибо.-JS

1 Ответ

0 голосов
/ 07 декабря 2018

Я не уверен, что правильно истолковал ваш вопрос.

api.one () устарела начиная с V9 из-за распространенного неправильного толкования разработчиками, согласно документации ORM API V11
Преемником api.one () является использование api.multi (), в методе, при необходимости, вызову sure_one.

Если ваша модель ожидает только Одна запись в определенных наборах записей, сделайте это

@api.multi
@api.depends('your_temp_field')
def _my_method(self):
    self.ensure_one() # self is a recordsets, if it contains more than 1 record, error will be raised.
    for record in self:
        record.field1 = 'value1'
        record.field2 = 'value2'
        record.field3 = 'value3'
        record.field4 = 'value4'

Если ваша модель ожидает более одной записи, но вам необходимо изменить определенные записи.
Вы можете просто использовать некоторые операторы if-else для целевых записей.
Если вам нужна только 0-я позиция, используйте вместо этого индексное поле .

Имейте в виду, что индекс добавляет дополнительную нагрузку на вашу базу данных с точки зрения производительности и размера, а также потому, что функция поиска / сортировки по умолчанию основана на этом.

Хороший пример вы можете найти здесь .

...