Onchange и зависимые методы с self, содержащим NewObjectId в качестве записей

Насколько я понимаю выполнение методов с декораторами @onchange и @depends, почти всегда аргумент self в обоих является набором записей с таким форматом:

res.partner (1, 2, 3) (например, в этом случае для модели res.partner)

Что представляет собой записи, к которым будут применены декорированные методы.

В случаях, когда ORM не восстанавливает идентификатор в базе данных, это происходит потому, что это элемент, который еще не был записан.

Это то, что я узнал из книг о теории Оду, и до сих пор это работало для меня.

Две недели назад после обновления сторонних модулей я стал замечать, что в моих собственных модулях аргумент self всегда возвращал мне (например):

res.partner (объект odoo.models.NewId по адресу 0x7f8c0f604768,)

И так для каждого из методов с этими декораторами.

Для меня это означает, что он не восстанавливает идентификатор в базе данных, а только возвращает его адрес в памяти.

Я пробовал много вещей, чтобы удалить все собственные модули и повторно клонировать их, или создать новую базу данных и установить только собственные модули, или создать новую базу, но только с модулями Odoo, и использовать чистый модуль, созданный командой scaffold или удалить среду IDE и переустановить ее до тех пор, пока не начнется тестирование в экземпляре на другом компьютере и установка моих собственных модулей. Но всегда получаю один и тот же результат.

До этих двух недель методы в моих собственных модулях правильно использовали себя. И обновления касались только сторонних модулей.

Другой интересный момент заключается в том, что как сторонние модули, так и модули Odoo восстанавливают набор записей в переменной self (согласно теории), но не для моих собственных модулей (даже не для базового модуля, созданного с использованием скаффолда. команда).

У меня следующие вопросы: - Почему переменная self использует запись таким образом? - Как я могу исправить эту ошибку, если бы она была?

Большое спасибо заранее!! :)


person Danilo Lerda    schedule 16.03.2019    source источник
comment
Можете ли вы включить код хотя бы для одного из используемых вами методов? Не забудьте указать, к какому классу он относится.   -  person travisw    schedule 17.03.2019
comment
На самом деле это не ошибка. Просто посмотрите на BaseModel.onchange, и вы увидите, что запись, в которой происходит изменение, будет заменена записью NewId, а происхождение будет сохранено в атрибуте _origin этой записи. Эта функция / логика используется с момента появления нового API в Odoo v8 (IIRC).   -  person CZoellner    schedule 18.03.2019


Ответы (1)


Для меня сейчас onchange методы подходят. Но в зависимых методах я понял, что у переменной self всегда был набор записей. На изображениях показан простой модуль, созданный с помощью команды scaffold и использующий систему отладки в Pycharm. Я просто остановился на методе с декоратором @depends и вот результат.

Среда Pycharm

серверная часть

person Danilo Lerda    schedule 18.03.2019
comment
В этом случае self может быть набором записей. Значит, код неправильный. Вам нужно перебрать себя и установить значение для каждого объекта - person qvpham; 20.03.2019