#python #xml #odoo #odoo-14
#питон #xml #одоо #одоо-14
Вопрос:
у меня есть поле выбора, объявленное в представлении формы, и я хочу, чтобы при каждом изменении поля выбора изменялись мои страницы. мое поле выбора:
package_name = fields.Selection([ ('labour', 'Labour Cost'), ('material', 'Material Cost'), ('subcontract', 'Subcontract Cost'), ('package', 'Work Package Cost'), ('others', 'Others')], string="Package Name", default="labour", required=True)
я объявил 4 страницы в xml-части, каждая для одного поля выбора. xml для страниц в блокноте приведены ниже:
lt;notebookgt; lt;page string="Labour Cost" name="labour_cost" attrs="{'invisible': [('package_name', 'not in', 'labour')]}"gt; lt;field name="header_id" attrs="{'invisible': [('package_name', '!=', 'labour')]}"gt; lt;tree string="Labour Cost Tree" editable="bottom"gt; lt;field name="cost_header_id"/gt; lt;field name="description"/gt; lt;field name="header_cost"/gt; lt;/treegt; lt;/fieldgt; lt;/pagegt; lt;page string="Material Cost" name="material_cost" attrs="{'invisible': [('package_name', '!=', 'material')]}"gt; lt;field name="header_id" attrs="{'invisible': [('package_name', '!=', 'material')]}"gt; lt;tree string="Material Cost Tree" editable="bottom"gt; lt;field name="product_id"/gt; lt;field name="qty"/gt; lt;field name="unit_price"/gt; lt;field name="uom"/gt; lt;field name="subtotal"/gt; lt;/treegt; lt;/fieldgt; lt;/pagegt; lt;/notebookgt;
в настоящее время есть 2 страницы, когда я комментирую «страницу из блокнота» в xml, тогда во внешнем интерфейсе отражается только поле другой «страницы блокнота», в противном случае, если оно отражает то же представление на 2 страницах, независимо от того, какое поле я объявляю на страницах другого блокнота.
может ли кто-нибудь, пожалуйста, помочь мне здесь.
Ответ №1:
Можете ли вы проверить attrs
первую страницу:
... attrs="{'invisible': [('package_name', 'not in', 'labour')]}"gt;
Это должно быть:
... attrs="{'invisible': [('package_name', '!=', 'labour')]}"
И вы определяете несколько представлений поля в виде дерева header_id
, но, к сожалению, Odoo выбирает только последнее определение для создания представления. Чтобы исправить это, вы можете попробовать определить представления в виде дерева отдельно для каждой страницы, а затем добавить context="{'tree_view_ref' : model.view_id'}"
поле. Например:
lt;record model="ir.ui.view" id="labour_cost_tree"gt; lt;field name="name"gt;Modellt;/fieldgt; lt;field name="model"gt;model.namelt;/fieldgt; lt;field name="arch" type="xml"gt; lt;tree string="Labour Cost Tree" editable="bottom"gt; lt;field name="cost_header_id"/gt; lt;field name="description"/gt; lt;field name="header_cost"/gt; lt;/treegt; lt;/fieldgt; lt;/recordgt;
Внутренняя страница:
lt;field name="header_id" attrs="{'invisible': [('package_name', '!=', 'labour')]}" context="{'tree_view_ref' : module.labour_cost_tree'}"gt;
Комментарии:
1. я тоже использовал …
attrs
=»{‘невидимый’: [(‘имя_пакета’, ‘!=’, ‘труд’)]}», но это не имеет никакого значения, все та же проблема2. Я обновил свой ответ. Ты можешь попробовать это?
3. я должен создать 4 новые модели для 4 видов дерева или 1 одну модель, которую можно объявить просто видом дерева и передать контекст на странице блокнота
4. все та же проблема, братан… она по-прежнему остается прежней, поле не меняется, меняются только страницы
Ответ №2:
@Рэнди Тран, ты прав. я определял более одного древовидного представления поля header_id, Odoo выбирал только последнее определение для создания представления. чтобы решить эту проблему, мне пришлось объявить поле one2many для каждой страницы блокнота.
lt;notebookgt; lt;page string="Labour Cost" name="labour_cost" attrs="{'invisible': [('package_name', '!=', 'labour')]}"gt; lt;field name="header_id"gt; lt;tree string="Labour Cost Tree" editable="bottom"gt; lt;field name="cost_header_id"/gt; lt;field name="description"/gt; lt;field name="header_cost"/gt; lt;/treegt; lt;/fieldgt; lt;/pagegt; lt;page string="Material Cost" name="material_cost" attrs="{'invisible': [('package_name', '!=', 'material')]}"gt; lt;field name="material_id"gt; lt;tree string="Material Cost Tree" editable="bottom"gt; lt;field name="product_id"/gt; lt;field name="qty"/gt; lt;field name="unit_price"/gt; lt;field name="uom"/gt; lt;field name="subtotal"/gt; lt;/treegt; lt;/fieldgt; lt;/pagegt; lt;/notebookgt;