как изменить страницы в блокноте с помощью поля выбора в odoo14

#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;