#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
проблемы. Я пока не знаю ни одного.