Модификация домена Many2One с использованием Many2Many

В качестве предисловия я использую Odoo 10 Enterprise.

У меня есть пользовательский модуль со следующими (это только соответствующие поля) в своей форме:

  • orange_tag_id = Это поле Many2Many с _Checkboxes Определен виджет, который подключен к модулю Tags (мы просто назовем его orange.tags). В этом поле отображаются шесть или семь тегов, которые я создал и затем применил к различным продуктам в модуле "product.product/template".
  • orange_child_ids = Это всего лишь One2Many внутри дочернего модуля родительского модуля. Это перечисляет product_tmpl_id Many2One, а затем только для чтения копия orange_tag_id от родителя, который просто копирует все, что выбрано в orange_tag_id в родительской форме (это было создано на всякий случай, определяя parent.orange_tag_id в домене не работал).

Когда тег выбран из orange_tag_id флажок, он должен отчасти изменить домен product_tmpl_id в orange_child_ids а затем отображать только те продукты в раскрывающемся списке, которые были помечены выбранным активным тегом. Мне удалось добиться такого рода работы, просто добавив следующее в представление формы XML внутри orange_child_ids:

<field name="product_tmpl_id" domain="[('orange_tag_id.id','in',parent.orange_tag_id[0])]"/>

При этом будут отображаться только продукты, помеченные выбранным тегом, с одним исключением: продукты Tag6 (просто называли его так, потому что его идентификатор был 6) всегда будут отображаться в раскрывающемся списке независимо от того, выбран он или нет. Если выбран Tag2, то будут отображаться продукты Tag2 и Tag6. Я попытался удалить Tag6 из всех продуктов, для которых он был определен, затем удалить запись Tag6, воссоздать тег и повторно применить его к соответствующим продуктам, но проблема остается. Я также могу выбрать только один тег в этом поле - если выбрано более одного, я получаю следующую ошибку от product_tmpl_id:

TypeError: not all arguments converted during string formatting

Это не такая большая проблема, как отсутствие правильного отображения записей, но я также хотел бы решить эту проблему, но я не совсем уверен, как.

Я искал несколько часов и знаю способы, с помощью которых это можно сделать в автономных установках, однако мы используем Odoo 10 Enterprise (я опустил требуемые x_ в моих вышеупомянутых настраиваемых полях просто для удобства чтения), и я не имею доступа к файловой системе и, следовательно, не могу вносить изменения там, где это требуется. Я пытался понять это, используя только инструменты разработчика и мой административный доступ к настройкам базы данных.

Я много возился с доменом, просмотрел много вопросов и обсуждений на форуме, и то, что у меня было, было единственным, что сработало. Есть ли способ заставить это работать правильно в рамках ограничений Enterprise?

Весьма признателен.

2 ответа

Похоже, что добавление [2] после [0] заставляет все работать и решает две проблемы, которые у меня были, так что:

<field name="product_tmpl_id" domain="[('orange_tag_id.id','in',parent.orange_tag_id[0][2])]"/>

Это отфильтрует результаты Many2One на основе записей, выбранных в поле Many2Many.

В то время как [('orange_tag_id.id','in',parent.orange_tag_id[0][2])] будет работать, это крайне неясно.

Я советую вам пойти с [('orange_tag_id.id','in',parent.orange_tag_id.ids)]

Другие вопросы по тегам