我已经尝试根据互联网上的一些教程为我的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函数来处理一些数据。
但是当我试图运行报告时,它返回:
QWebException: "'NoneType' object is not callable" while evaluating
'hello_world()'
我已在ig_account_object_printout_report_parser.py
__init__.py
我错过了什么吗?
答案 0 :(得分:3)
在Qweb View中调用方法时检查方法参数。
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>
您可以检查升级模块并尝试再次打印报告
我希望这对你有用..:)