You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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),比如:
    # estate_property模型中的关联字段示例
    author_ids = fields.Many2many('author', string='Authors')
    
    先搞懂Odoo字段类型(many2one/many2many/one2many)的区别和用法,这是展示关联数据的基础。
  • 模仿官方模块代码:参考Odoo官方模块(如estate、contacts)的视图和模型代码,比如看contacts模块如何展示关联地址数据,从模仿开始上手。
  • 掌握调试技巧:遇到报错时查看Odoo日志(设置 > 技术 > 日志),里面会明确指出XML语法错误位置;开启开发者模式后,可通过「编辑视图:表单」功能实时修改预览。
  • 循序渐进学习:先实现简单字段展示,再尝试关联数据展示、自定义组件、视图继承等进阶内容,不要一开始就写复杂逻辑。

内容的提问来源于stack exchange,提问作者KostasC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:50:30