为 QWeb 报告添加自定义解析器
Add a custom parser for QWeb report
我尝试根据互联网上的一些教程为我的 qweb 报告创建自定义解析器:
ig_account_object_printout_report_parser.py
import time
from openerp.osv import osv
from openerp.report import report_sxw
class ig_account_object_printout_report_parser(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(ig_account_object_printout_report_parser, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'hello_world': self._hello_world,
})
def _hello_world(self, field):
return "Hello World!"
class ig_account_object_report(osv.AbstractModel):
_name = 'ig_account.ig_account_object_printout_report_template'
_inherit = 'report.abstract_report'
_template = 'ig_account.ig_account_object_printout_report_template'
_wrapped_report_class = ig_account_object_printout_report_parser
ig_account_object_printout_report.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<report
id="ig_account_object_printout"
model="ig.account.object"
string="Print Account Object"
report_type="qweb-pdf"
name="ig_account.ig_account_object_printout_report_template"
attachment_use="False"
file="ig_account.ig_account_object_printout_report_template"
/>
</data>
</openerp>
ig_account_object_printout_report_template.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="ig_account_object_printout_report_template">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<div class="page">
<span t-esc="hello_world()"/>
</div>
</t>
</t>
</template>
</data>
</openerp>
我需要自定义解析器,因为没有它我将无法调用 python 函数来处理一些数据。
但是当我尝试 运行 报告时 returns:
QWebException: "'NoneType' object is not callable" while evaluating
'hello_world()'
我已将 ig_account_object_printout_report_parser.py
包含在 __init__.py
中
我是不是漏掉了什么?
在 Qweb 视图中调用方法时检查方法参数。
def _hello_world(self, field):
return "Hello World!"
上述函数使用一些参数作为字段,但您可以尝试像这样调用该函数。
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="ig_account_object_printout_report_template">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<div class="page">
<span t-esc="hello_world(o.some_field_name)"/>
</div>
</t>
</t>
</template>
</data>
</openerp>
您可以检查升级您的模块并尝试再次打印报告
希望这对您有所帮助..:)
我尝试根据互联网上的一些教程为我的 qweb 报告创建自定义解析器:
ig_account_object_printout_report_parser.py
import time
from openerp.osv import osv
from openerp.report import report_sxw
class ig_account_object_printout_report_parser(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(ig_account_object_printout_report_parser, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'time': time,
'hello_world': self._hello_world,
})
def _hello_world(self, field):
return "Hello World!"
class ig_account_object_report(osv.AbstractModel):
_name = 'ig_account.ig_account_object_printout_report_template'
_inherit = 'report.abstract_report'
_template = 'ig_account.ig_account_object_printout_report_template'
_wrapped_report_class = ig_account_object_printout_report_parser
ig_account_object_printout_report.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<report
id="ig_account_object_printout"
model="ig.account.object"
string="Print Account Object"
report_type="qweb-pdf"
name="ig_account.ig_account_object_printout_report_template"
attachment_use="False"
file="ig_account.ig_account_object_printout_report_template"
/>
</data>
</openerp>
ig_account_object_printout_report_template.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="ig_account_object_printout_report_template">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<div class="page">
<span t-esc="hello_world()"/>
</div>
</t>
</t>
</template>
</data>
</openerp>
我需要自定义解析器,因为没有它我将无法调用 python 函数来处理一些数据。
但是当我尝试 运行 报告时 returns:
QWebException: "'NoneType' object is not callable" while evaluating
'hello_world()'
我已将 ig_account_object_printout_report_parser.py
包含在 __init__.py
我是不是漏掉了什么?
在 Qweb 视图中调用方法时检查方法参数。
def _hello_world(self, field):
return "Hello World!"
上述函数使用一些参数作为字段,但您可以尝试像这样调用该函数。
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="ig_account_object_printout_report_template">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<div class="page">
<span t-esc="hello_world(o.some_field_name)"/>
</div>
</t>
</t>
</template>
</data>
</openerp>
您可以检查升级您的模块并尝试再次打印报告
希望这对您有所帮助..:)