🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 基本视图 [TOC] 视图定义了模型数据的呈现方式。不同的视图类型决定了数据的可视化方式(记录行列表、图形化聚合)。视图可以通过类型(比如*partners*列表)或id被请求。对于一般请求,将被对应类型的最低优先级视图响应(每个类型的最低优先级视图是该类型的默认视图)。视图继承允许更改在其他地方声明的视图(添加或删除内容)。 #### 通用视图声明 视图通过一个`ir.ui.view`的模型记录来声明。视图类型由`arch`字段的根元素隐含定义: ~~~ <record model="ir.ui.view" id="view_id"> <field name="name">view.name</field> <field name="model">object_name</field> <field name="priority" eval="16"/> <field name="arch" type="xml"> <!-- view content: <form>, <tree>, <graph>, ... --> </field> </record> ~~~ > 危险 > 因为视图的内容是XML,所以`arch`字段必须被声明为`type="xml"`以正确解析。 #### 树视图 树视图也被称为列表视图,以表格形式显示记录。根元素是`<tree>`.最简单的树视图是在表格中列出所有字段(每列对应一个字段): ~~~ <tree string="Idea list"> <field name="name"/> <field name="inventor_id"/> </tree> ~~~ #### 表单视图 表单视图通常用来建立和编辑单条记录。根元素是`<form>`,由结构元素(groups,notebooks)和交互元素(button,fields)组成。 ~~~ <form string="Idea form"> <group colspan="4"> <group colspan="2" col="2"> <separator string="General stuff" colspan="2"/> <field name="name"/> <field name="inventor_id"/> </group> <group colspan="2" col="2"> <separator string="Dates" colspan="2"/> <field name="active"/> <field name="invent_date" readonly="1"/> </group> <notebook colspan="4"> <page string="Description"> <field name="description" nolabel="1"/> </page> </notebook> <field name="state"/> </group> </form> ~~~ > 练习使用XML定制窗体视图 > 建立课程对象的表单视图,显示课程的名称和描述字段。 `openacademy/views/openacademy.xml` ~~~ <?xml version="1.0" encoding="UTF-8"?> <odoo> <data> <record model="ir.ui.view" id="course_form_view"> <field name="name">course.form</field> <field name="model">openacademy.course</field> <field name="arch" type="xml"> <form string="Course Form"> <sheet> <group> <field name="name"/> <field name="description"/> </group> </sheet> </form> </field> </record> <!-- window action --> <!-- The following tag is an action definition for a "window action", ~~~ > 练习notebook结构元素 > 在课程的表单视图中,将描述字段放在一个选项卡中,然后再添加选项卡放置其它字段。修改后的课程表单视图如下: `openacademy/views/openacademy.xml` ~~~ <sheet> <group> <field name="name"/> </group> <notebook> <page string="Description"> <field name="description"/> </page> <page string="About"> This is an example of notebooks </page> </notebook> </sheet> </form> </field> ~~~ 表单视图也可以使用纯HTML来进行更灵活的布局 ~~~ <form string="Idea Form"> <header> <button string="Confirm" type="object" name="action_confirm" states="draft" class="oe_highlight" /> <button string="Mark as done" type="object" name="action_done" states="confirmed" class="oe_highlight"/> <button string="Reset to draft" type="object" name="action_draft" states="confirmed,done" /> <field name="state" widget="statusbar"/> </header> <sheet> <div class="oe_title"> <label for="name" class="oe_edit_only" string="Idea Name" /> <h1><field name="name" /></h1> </div> <separator string="General" colspan="2" /> <group colspan="2" col="2"> <field name="description" placeholder="Idea description..." /> </group> </sheet> </form> ~~~ #### 搜索视图 搜索视图可对列表视图(或者其它聚合视图)中的字段进行搜索。搜索视图的根元素是`<search>`,内容包含所有可以搜索的字段。 ~~~ <search> <field name="name"/> <field name="inventor_id"/> </search> ~~~ 如果在模型中没有定义搜索视图,Odoo会生成一个只包含`name`字段的搜索视图。 > 练习搜索课程,通过标题和描述来搜索课程。 `openacademy/views/openacademy.xml` ~~~ </field> </record> <record model="ir.ui.view" id="course_search_view"> <field name="name">course.search</field> <field name="model">openacademy.course</field> <field name="arch" type="xml"> <search> <field name="name"/> <field name="description"/> </search> </field> </record> <!-- window action --> <!-- The following tag is an action definition for a "window action", ~~~ 作者:luohuayong 链接:http://www.jianshu.com/p/cc63c684447a 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。