Odoo开发:能否在EstateProperty表单视图中展示AuthorsModel条目?
代码可行性分析与问题修正
你的代码不可行,存在几个关键语法和逻辑问题:
- 所有字段标签不完整:比如
name="name"/>必须写成<field name="name"/>,缺少<field开头会直接导致XML解析失败,视图无法加载。 - 错误使用继承语法:
<field name="author_ids" position="after">是视图继承时的写法,但当前视图未指定inherit_id(要继承的父视图ID)。如果这是全新表单视图,直接把作者展示代码放在字段列表末尾即可;如果是继承现有视图,必须在<record>中添加inherit_id指向父视图。 - XML结构不完整:
<arch>标签未闭合,缺少</arch>和</record>标签,整个XML结构会报错。
修正后的新建视图示例
<?xml version="1.0" encoding="utf-8"?> <odoo> <record id="view_estate_property_advertisement_form" model="ir.ui.view"> <field name="name">estate.property.form</field> <field name="model">estate.property</field> <field name="arch" type="xml"> <form> <sheet> <field name="name"/> <field name="description"/> <field name="postcode"/> <field name="date_availability"/> <field name="expected_price"/> <field name="selling_price"/> <field name="bedrooms"/> <field name="living_area"/> <field name="facades"/> <field name="garage"/> <field name="garden"/> <field name="garden_area"/> <field name="garden_orientation"/> <field name="state_property"/> <field name="active"/> <div class="oe_title">Authors</div> <div class="oe_subtitle"> <t t-if="len(record.author_ids) == 0">No authors</t> <t t-if="len(record.author_ids) > 0"> <t t-foreach="record.author_ids" t-as="author"> <span t-field="author.name"/> <t t-if="not last">,</t> <!-- 用逗号分隔作者 --> </t> </t> </div> </sheet> </form> </field> </record> </odoo>
继承现有视图的示例
<?xml version="1.0" encoding="utf-8"?> <odoo> <record id="view_estate_property_advertisement_form" model="ir.ui.view"> <field name="name">estate.property.form.inherit</field> <field name="model">estate.property</field> <field name="inherit_id" ref="estate.view_estate_property_form"/> <!-- 指定继承的父视图 --> <field name="arch" type="xml"> <!-- 在active字段后插入作者展示内容 --> <field name="active" position="after"> <div class="oe_title">Authors</div> <div class="oe_subtitle"> <t t-if="len(record.author_ids) == 0">No authors</t> <t t-if="len(record.author_ids) > 0"> <t t-foreach="record.author_ids" t-as="author"> <span t-field="author.name"/> <t t-if="not last">,</t> </t> </t> </div> </field> </field> </record> </odoo>
新手学习方向指引
- 先掌握视图基础语法:重点学习表单(form)、列表(tree)视图的XML结构,熟悉
<field>、<form>、<sheet>、<group>等核心标签,以及视图继承的position属性(before/after/replace)的使用场景。 - 理解模型关联关系:确保
estate.property模型的author_ids是正确的关联字段(many2many/one2many),比如:
先搞懂Odoo字段类型(many2one/many2many/one2many)的区别和用法,这是展示关联数据的基础。# estate_property模型中的关联字段示例 author_ids = fields.Many2many('author', string='Authors') - 模仿官方模块代码:参考Odoo官方模块(如
estate、contacts)的视图和模型代码,比如看contacts模块如何展示关联地址数据,从模仿开始上手。 - 掌握调试技巧:遇到报错时查看Odoo日志(设置 > 技术 > 日志),里面会明确指出XML语法错误位置;开启开发者模式后,可通过「编辑视图:表单」功能实时修改预览。
- 循序渐进学习:先实现简单字段展示,再尝试关联数据展示、自定义组件、视图继承等进阶内容,不要一开始就写复杂逻辑。
内容的提问来源于stack exchange,提问作者KostasC
相关产品推荐
相关产品推荐

