Odoo继承stock.picking创建自定义模型并配置XML视图及新增字段问题
问题原因
你当前的写法同时定义了_inherit = 'stock.picking'和_name = 'loading.chart',属于Odoo的原型继承,会生成完全独立的新模型loading.chart,和原有的stock.picking没有关联,所以会出现两种问题:
- 写model为
loading.chart时,得到的是全新模型,看不到原stock.picking的业务数据 - 写model为
stock.picking时,看不到新增字段,因为字段都加到了新模型loading.chart上,原模型没有这些字段
根据你的实际需求,对应两种解决方案:
方案1:仅扩展原有stock.picking模型,给原有库存调拨功能新增字段
如果你不需要独立菜单,只想在原有库存调拨的视图里显示新字段,按以下修改:
第一步:修改Python代码
删除_name = 'loading.chart',仅保留继承逻辑:
class LoadingChart(models.Model): _inherit = 'stock.picking' _description = "Loading Chart" nf_date = fields.Date(string="Loading Date") nf_date1 = fields.Datetime(string="Date") nf_reference = fields.Char(string="Reference") nf_seq = fields.Char(string='Loading Sequence', required=True, copy=False, readonly=True, index=True, default=lambda self: _('New'))
第二步:修改XML代码
通过inherit_id继承原有stock.picking的视图,在原有视图基础上插入新字段即可:
<?xml version='1.0' encoding='utf-8'?> <odoo> <!-- 继承原有库存调拨树视图 --> <record model="ir.ui.view" id="stock_picking_tree_inherit"> <field name="name">stock.picking.tree.inherit</field> <field name="model">stock.picking</field> <field name="inherit_id" ref="stock.view_picking_tree"/> <field name="arch" type="xml"> <!-- 在原有树视图的name字段后插入新字段 --> <field name="name" position="after"> <field name="nf_date"/> <field name="nf_date1"/> </field> </field> </record> <!-- 继承原有库存调拨表单视图 --> <record id="stock_picking_form_inherit" model="ir.ui.view"> <field name="name">stock.picking.form.inherit</field> <field name="model">stock.picking</field> <field name="inherit_id" ref="stock.view_picking_form"/> <field name="arch" type="xml"> <!-- 在原有表单视图的reference字段后插入新字段 --> <field name="reference" position="after"> <field name="nf_seq" readonly="1"/> <field name="nf_date"/> <field name="nf_date1"/> <field name="nf_reference"/> </field> </field> </record> </odoo>
方案2:创建独立的loading.chart模型,继承stock.picking所有功能+独立菜单
如果你需要完全独立的业务模块,带专属菜单,保留stock.picking原有功能,按以下修改:
你当前的Python代码是正确的,XML存在标签未闭合、字段名多空格的语法错误,修正后代码如下:
<?xml version='1.0' encoding='utf-8'?> <odoo> <record model="ir.ui.view" id="nf_unloading_view"> <field name="name">Loading.chart.tree</field> <field name="model">loading.chart</field> <field name="arch" type="xml"> <tree> <field name="nf_date"/> <field name="nf_date1"/> <field name="nf_reference"/> <field name="nf_seq"/> </tree> </field> </record> <record id="loading_chart_form_view" model="ir.ui.view"> <field name="name">loading.chart.form</field> <field name="model">loading.chart</field> <field name="arch" type="xml"> <form> <sheet> <div class='oe_title'> <h1> <field name="nf_seq" readonly="1"/> </h1> </div> <group> <group> <field name="nf_date"/> <field name="nf_date1"/> </group> <group> <field name="nf_reference"/> </group> </group> </sheet> </form> </field> </record> <record model="ir.actions.act_window" id="loading_chart_action_window"> <field name="name">loading Chart</field> <field name="res_model">loading.chart</field> <field name="view_mode">tree,form</field> </record> <menuitem id="loading_chart_root_menu" name="Loading Chart" parent="stock.menu_stock_warehouse_mgmt" action="loading_chart_action_window" sequence="20"/> </odoo>
生效注意事项
- 修改完成后必须升级对应的自定义模块,改动才会生效
- 如果普通用户看不到新增字段,需要在模块的权限配置文件中添加对应字段的访问权限
内容的提问来源于stack exchange,提问作者Nasiha
相关产品推荐
相关产品推荐

