我在qweb报表中遇到问题,我按照本教程http://blog.emiprotechnologies.com/create-qweb-report-odoo/创建了qweb报表,它可以与当前模块的静态数据正常工作,但是当我尝试为动态数据创建解析器类时,出现此错误“QWebException:在评估“”这是我的python类时,“'NoneType'对象不可调用”:
from openerp.osv import osv
from openerp.report import report_sxw
class etudiant_report_parser(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(etudiant_report_parser, self).__init__(cr, uid, name, context=context)
self.localcontext.update({
'hello_world': self.hello_world,
})
self.context = context
def hello_world(self):
return "hello"
class etudiant_object_report(osv.AbstractModel):
_name = 'report.gestion_des_etudiants.etudiant_report'
_inherit = 'report.abstract_report'
_template = 'gestion_des_etudiants.etudiant_report'
_wrapped_report_class = etudiant_report_parser
在我的xml文件etudiant_report.xml中,我添加了这一行:
<span t-esc=”hello_world()”/>
但是当我打印报告时出现错误:
QWebException: "'NoneType' object is not callable" while evaluating
这是我的模块的树状结构:
/report/ init .py
/report/etudiant_report.py
/views/report_etudiant.xml
初始 .py
openerp .py
etudiant_view.xml
etudiant_report.xml
学习者
我注意到的另一件事是,当我进入“报告”文件夹时,找不到初始 .py和etudiant_report.py的任何.pyc文件。
最佳答案
为了从模型中调用自定义方法,您可以执行以下操作。
在模型中定义方法
@api.multi
def mymethod(self):
return "mymethod"
然后从qweb调用该方法。这是qweb的示例代码,该代码从模型中调用自定义方法。
<template id="th_custom_report">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="th_dynamic_report.th_report_id" t-lang="o.partner_id.lang"/>
</t>
</t>
</template>
<template id="th_report_id">
<t t-call="report.external_layout">
<t t-set="o" t-value="o.with_context({'lang':o.partner_id.lang})" />
<span t-esc="o.mymethod()"/>
</t>
</t>
<template>
会帮你的!