active_id не работает должным образом в Odoo 13. Как работать без него?

#python #python-3.x #xml #odoo #odoo-13

#python #python-3.x #xml #odoo #odoo-13

Вопрос:

Это проблема, которая случается со всеми, кому нужно использовать active_id : https://github.com/odoo/odoo/issues/39070

Таким образом, в настраиваемом stock.production.lot представлении у меня есть это:

 <field name="outgoing_moves" context="{'default_lot_id': active_id}"/>
  

Где outgoing_moves находится поле One2many. Я только хочу автоматически заполнять поле lot_id текущим открытым лотом каждый раз, когда пользователь добавляет новый исходящий ход.

Проблема в том, что если я открываю это представление партии из другого представления модели (например, с помощью кнопки быстрого доступа), active_id оно не обновляется и возвращает мне идентификатор предыдущей модели.

Например, я открываю лот 61 после нажатия на кнопку в клиенте 133. Когда я пытаюсь добавить новый исходящий ход в поле One2many, я получаю сообщение об ошибке «Лот с идентификатором 133 не существует«. Это ошибка Odoo версии 13.0, в настоящее время еще не исправлена.

Решение, которое они предлагают в потоке GitHub, заключается в использовании active_ids[0] вместо active_id :

Обратите внимание, что это использует active_ids [0], который работает даже в приведенном вами примере.

 <field name="outgoing_moves" context="{'default_lot_id': active_ids[0]}"/>
  

Ну, кажется, все довольны этим решением, но в моем случае оно не работает. Я почти уверен, что мой код правильно обновлен и что я использую active_ids[0] , но я всегда получаю неправильный идентификатор.

Другое решение, которое я прочитал, — использовать реализуемый идентификатор, что означает идентификатор самой записи (lot в моем случае). Я пробовал и работал, но иногда, после перезапуска Odoo, я получаю ошибку JavaScript каждый раз, когда я нажимаю на что-либо в Odoo. И ошибка исчезает, когда я удаляю контекст outgoing_moves :

 <field name="id" invisible="1"/>
<field name="outgoing_moves" context="{'default_lot_id': id}"/>
  

Кто-нибудь сталкивался с этой проблемой и нашел обходной путь?

Комментарии:

1. lot_id является ли обратное поле для поля One2many, если я правильно догадываюсь? Зачем вам вообще нужно это поле? Он будет установлен Odoo при создании, просто удалите его из представления или, если это представление по умолчанию (используется в другом месте), создайте унаследованное представление, которое удаляет поле, и используйте его в представлении формы партии для outgoing_moves поля.

2. Унаследованное представление должно быть основным представлением, которое не будет расширять исходное представление, а только наследовать от него.

3. Да, это обратное поле, и вы правы, если я удалю его из представления, оно автоматически заполняется Odoo при создании. В моем случае мне не нужно наследовать представление, поскольку я использую его только здесь. Итак, ваш комментарий — это решение моей проблемы, большое вам спасибо. Вы можете преобразовать его в ответ, чтобы я мог его принять. Однако active_id проблема с Odoo по-прежнему остается проблемой для будущих разработок, сталкивались ли вы с этим?

Ответ №1:

lot_id является ли обратное поле для поля One2many, если я правильно догадываюсь?

Вам не нужно показывать или даже определять это поле в представлении списка / формы модели поля One2many, потому что оно будет заполнено Odoo автоматически при создании.

Но если это представление по умолчанию (используется в другом месте), создайте унаследованное представление, которое удаляет поле, и определите это новое представление как используемое, особенно там, где вам это нужно.

Это не решение active_id проблемы. Я пока не знаю ни одного.