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

安装自定义模块product_print_zpl_barcode时提示模型product.print.zpl.barcode未找到

解决Odoo安装自定义模块时的ParseError:未找到模型product.print.zpl.barcode

你遇到的这个错误本质很清晰:Odoo找不到product.print.zpl.barcode模型,因为你只配置了视图和动作的XML文件,但完全没定义这个模型的Python代码。Odoo的模块依赖Python代码来注册模型,光有XML视图根本没用,系统不知道这个模型的结构、字段和方法。

下面是一步步的解决步骤:

1. 创建模型的Python文件

在你的product_print_zpl_barcode模块里,新建models/product_print_zpl_barcode.py文件,把模型、对应字段和视图按钮需要的方法定义进去——要和你视图里用到的所有字段一一对应:

from odoo import models, fields, api

class ProductPrintZplBarcode(models.Model):
    _name = 'product.print.zpl.barcode'  # 这里的名称必须和视图里的model字段完全一致
    _description = 'Generate and Print Product Barcode'

    # 对应视图中的字段,类型和属性要匹配
    state = fields.Selection(
        [('step1', 'Configuration'), ('step2', 'Label')],
        default='step1',
        string='State'
    )
    currency_id = fields.Many2one('res.currency', string='Currency')
    product_id = fields.Many2one('product.product', string='Product', required=True)
    product_name = fields.Char(string='Product Name')
    pricelist_id = fields.Many2one('product.pricelist', string='Pricelist')
    price_uom = fields.Many2one('uom.uom', string='Price UOM')
    label_size = fields.Char(string='Label Size')
    nomenclature_id = fields.Many2one('barcode.nomenclature', string='Barcode Nomenclature')
    rule_id = fields.Many2one('barcode.rule', string='Barcode Rule')
    barcode_type = fields.Selection(
        [('product', 'Product'), ('custom', 'Custom')],
        string='Barcode Type',
        default='product'
    )
    barcode = fields.Char(string='Barcode')
    copies = fields.Integer(string='Copies', default=1)
    quantity = fields.Float(string='Quantity')
    uom_id = fields.Many2one('uom.uom', string='UOM')
    price = fields.Float(string='Price')
    zpl_file = fields.Binary(string='ZPL File')
    zpl_filename = fields.Char(string='ZPL Filename')
    # 如果用的是Odoo自带的打印模块,改成printing.printer;如果是自定义打印机模型,确保它已定义
    zpl_printer_id = fields.Many2one('printing.printer', string='ZPL Printer')

    # 视图中按钮对应的方法,必须实现
    def generate(self):
        # 这里写生成ZPL标签的业务逻辑,比如生成条形码、生成ZPL内容
        # 示例:把产品的条形码赋值给字段,切换到step2状态
        self.barcode = self.product_id.barcode
        self.state = 'step2'

    def print_zpl(self):
        # 这里写打印ZPL文件的逻辑,比如调用打印机API发送ZPL内容
        # 处理"Print and New"的逻辑
        if self.env.context.get('print_and_new'):
            self.state = 'step1'
            # 重置表单字段
            self.product_id = False
            self.barcode = False
            # 其他需要重置的字段...

2. 导入模型到模块

打开模块根目录的__init__.py文件,导入刚才创建的模型:

from .models import product_print_zpl_barcode

如果你的models目录下有自己的__init__.py,也要在那里添加:

from . import product_print_zpl_barcode

3. 更新模块的配置文件

检查模块的__manifest__.py(Odoo 10及以上版本用这个,旧版本是__openerp__.py),确保:

  • 包含了必要的依赖(比如product、uom、barcodes、printing等,根据你的模型字段来)
  • data列表里包含了你的视图文件

示例配置:

{
    'name': 'Product Print ZPL Barcode',
    'version': '1.0',
    'author': 'Your Name',
    'category': 'Inventory/Barcodes',
    'depends': ['product', 'uom', 'barcodes', 'printing'],
    'data': [
        'views/product_print_zpl_barcode_view.xml',
    ],
    'installable': True,
    'auto_install': False,
}

4. 重新安装/升级模块

做完以上步骤后,回到Odoo后台:

  1. 先卸载已安装的product_print_zpl_barcode模块(如果之前安装过)
  2. 重新安装这个模块

现在Odoo就能识别到product.print.zpl.barcode模型,视图也能正常加载,不会再出现ParseError了。

额外注意点

  • 视图里的所有字段必须和模型里定义的字段完全一致(字段名、类型),不然会出现字段找不到的错误
  • 如果你的zpl_printer_id用的是自定义模型,要确保那个模型也已经正确定义并导入
  • 按钮的方法(generate、print_zpl)必须在模型里实现,不然点击按钮会报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:03:32