Модификация домена 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)]