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格式的图片,如果条码生成失败,则会抛出异常。