Odoo 12自定义模块视图异常:仅显示ID列问题求助
解决Odoo 12模块Tree视图不显示自定义字段的问题
嘿,我帮你梳理下可能漏掉的关键步骤,你已经完成了模块scaffold和基础代码编写,但几个细节没处理好导致视图不显示字段:
1. 字段参数拼写错误(最可能的原因)
你在produk.py里定义字段时用了大写的String,但Odoo的字段参数是小写的string!这个错误会让系统无法识别字段的显示标签,甚至可能导致字段无法被正确注册,视图自然找不到这些字段。
修正后的produk.py代码:
# -*- coding: utf-8 -*- from odoo import models, fields, api class ProdukProduk(models.Model): _name = 'ms_produk.ms_produk' kd_produk = fields.Char(string='Kode Produk', required=True) # 把String改成string nm_produk = fields.Char(string='Nama Produk', required=True) # 同上
2. 检查__manifest__.py是否加载了视图文件
scaffold生成的__manifest__.py默认可能没包含你新增的master_produk_view.xml,Odoo不会自动加载未声明的视图文件。打开模块根目录下的__manifest__.py,确保data列表里有这个视图路径:
'data': [ 'views/master_produk_view.xml', ],
3. 修正视图定义的标准写法(可选但更稳妥)
虽然在ir.actions.act_window里直接写arch字段理论上可行,但Odoo更推荐单独定义ir.ui.view记录,避免优先级或识别问题。修改你的master_produk_view.xml为标准结构:
<?xml version="1.0" encoding="UTF-8"?> <odoo> <data> <!-- 单独定义Tree视图 --> <record id="view_ms_produk_tree" model="ir.ui.view"> <field name="name">ms_produk.tree.view</field> <field name="model">ms_produk.ms_produk</field> <field name="arch" type="xml"> <tree> <field name="kd_produk"/> <field name="nm_produk"/> </tree> </field> </record> <!-- 定义Form视图(如果需要的话) --> <record id="view_ms_produk_form" model="ir.ui.view"> <field name="name">ms_produk.form.view</field> <field name="model">ms_produk.ms_produk</field> <field name="arch" type="xml"> <form> <sheet> <group> <field name="kd_produk"/> <field name="nm_produk"/> </group> </sheet> </form> </field> </record> <!-- 动作关联视图 --> <record id="masterproduk_menu_action" model="ir.actions.act_window"> <field name="name">Master Produk</field> <field name="res_model">ms_produk.ms_produk</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> <!-- 显式关联视图(可选,让逻辑更清晰) --> <field name="view_ids" eval="[(5,0,0), (0,0, {'view_mode': 'tree', 'view_id': ref('view_ms_produk_tree')}), (0,0, {'view_mode': 'form', 'view_id': ref('view_ms_produk_form')})]"/> <field name="help" type="html"> <p class="oe_view_nocontent_create">Create Product </p> </field> </record> <menuitem id="masterproduk_menu" name="MasterProduk"/> <menuitem id="Masterproduk_new_product_menu" parent="masterproduk_menu" name="New Produk" action="masterproduk_menu_action"/> </data> </odoo>
4. 修正模块导入路径
你的__init__.py结构可能有问题,正确的导入层级应该是:
- 模块根目录下的
__init__.py:# -*- coding: utf-8 -*- from . import models models目录下的__init__.py:# -*- coding: utf-8 -*- from . import produk
之前你在根目录的__init__.py直接导入produk是错误的,因为produk.py在models子目录下,这样会导致模型无法被正确加载。
5. 重新升级模块并验证
完成以上修改后:
- 重启Odoo服务
- 进入Odoo后台,找到你的
ms_produk模块,点击Upgrade(确保勾选升级选项) - 查看Odoo日志,确认没有模型加载或视图解析的错误(比如
Field not found这类提示)
做完这些步骤,你的Tree视图应该就能正常显示kd_produk和nm_produk字段了。
内容的提问来源于stack exchange,提问作者Ke Vin




