IR

ir是infomation repository的缩写,意思是信息仓库,即这个架构下的所有对象都是为构建信息化服务的。在此架构下的对象有

子项 说明
ir.actions 动作对象
ir.actions.report 报表动作对象
ir.attachment 附件对象
ir.config.parameter 系统配置参数对象
ir.cron 定时任务对象
ir.fields 模型字段对象
ir.filters 数据过滤器对象
ir.http HTTP请求相关对象
ir.logging 日志记录对象
ir.mail.server 邮件服务器配置对象
ir.module 模块管理对象
ir.property 属性配置对象
ir.qweb 模板引擎对象
ir.qweb.fields 模板字段对象
ir.rule 访问规则对象
ir.sequence 序列号生成对象
ir.translation 国际化翻译对象
ir.ui.menu 菜单对象
ir.ui.view 用户界面视图对象

ir.ui.view

ir.ui.view对象是Odoo用于构建和管理各种用户界面的对象。它的主要作用包括:

  • 定义视图结构:根据 XML 或其他格式描述界面布局,如表单、树形列表、图表、日历和看板等。
  • 分离数据和界面:使数据模型与界面设计分离,通过预先定义好的视图类型来动态生成用户界面,提高维护性和可扩展性。
  • 支持自定义与扩展:开发者可以通过继承和扩展 ir.ui.view 定义的视图,实现个性化的界面需求。

这种设计模式不仅提高了代码的重用性,还使得 Odoo 系统在面对复杂业务需求时更易于定制和扩展。常见的视图类型例如 表单(form)、树形列表(tree)、图表(graph)、日历(calendar)、看板(kanban)等都是ir.ui.view中一种类型。

get_formview_action

基于odoo 16.0, get_formview_action定义在base模型上,但其源代码位于ir.ui.view文件中,因此我们放到这里来介绍。

get_formview_action是ir.ui.view对象中用来展示form表单的动作。其定义也非常简单:

def get_formview_action(self, access_uid=None):
    """ Return an action to open the document ``self``. This method is meant
        to be overridden in addons that want to give specific view ids for
        example.

    An optional access_uid holds the user that will access the document
    that could be different from the current user. """
    view_id = self.sudo().get_formview_id(access_uid=access_uid)
    return {
        'type': 'ir.actions.act_window',
        'res_model': self._name,
        'view_type': 'form',
        'view_mode': 'form',
        'views': [(view_id, 'form')],
        'target': 'current',
        'res_id': self.id,
        'context': dict(self._context),
    }

我们从其定义中就可以看出,get_formview_action方法的本质就是使用ir.actions.act_window来打开本对象的form视图。

ir.actions.report

ir.actions.report对象用来处理报表相关的处理动作。

条码打印

利用ir.actions.report的barcode方法我们可以生成各种格式的条形码。下面是一个生成Code128格式的条形码的例子。

barcode = request.env['ir.actions.report'].barcode('Code128', order_name)

headers = [
    ('Content-Type', 'image/png'),
    ('Content-Length', len(barcode))
]
return request.make_response(barcode, headers)

下面我们详细看一下barcode方法的用法。

@api.model
def barcode(self, barcode_type, value, **kwargs):
    ...
  • barcode_type: 指定条码的格式(支持的格式:EAN13,EAN8,DataMatrix,QR,Code128), 默认的是Code128格式
  • value: 条码的文本值。

该方法返回一个PNG格式的图片,如果条码生成失败,则会抛出异常。

results matching ""

    No results matching ""