如何使用自定义数据创建报告并在QWEB报告中使用该数据?

时间:2019-07-02 14:24:05

标签: pdf report odoo qweb

我想将数据传递到qweb报告并在报告中打印该数据。

python代码:

pdf = self.env['report'].sudo().get_pdf(self.ids, report_name, data={'test_variable': 'test_passed'})

报告模板:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <report id="my_module.report_id" model="my_module.report_model" string="Some Model Report" report_type="qweb-pdf" name="my_module.daily_report" file="my_module.daily_report_file" menu="False"/>
        <template id="my_module.daily_report">
            <t t-call="report.html_container">
                <t t-call="report.internal_layout">
                    <div class="page">
                        <div class="header">
                            <h4>HEADER</h4>
                            <-- i want to see "test_passed" value below -->
                            <span t-esc="data.test_variable"/>

                        </div>
                    </div>
                </t>
            </t>
        </template>
    </data>
</odoo>

创建pdf时,看不到变量值。

1 个答案:

答案 0 :(得分:0)

尝试使用此代码传递数据

from odoo import models, api

class ReportClassName(models.AbstractModel):
   _name = 'report.module_name.report_name'

   @api.model
   def render_html(self, docids, data=None):
      docargs = {
       'doc_ids': self.ids,
       'doc_model': self.model,
       'data': data,
      }
     return self.env['report'].render('module_name.report_name', docargs)

您可以使用此自定义report.py作为报告传递数据作为数据,并将其调用

<t t-esc="data"/>

在模板中查看qweb报告中的数据。请参考此link以使用py和xml文件创建自定义报告。

在odoo11或odoo 12中,您可以使用get_report_values代替render_html

@api.model
def get_report_values(self, docids, data=None): 
    docs = self.env['model.name'].browse(docids)
    return {
         'doc_ids': docids,
         'doc_model': 'model.name',
         'docs': docs,
         'lines': self.some_func(docs),
         'data': data,
    }

如果数据是某些函数,请在行和line ['field']中调用该函数以获取pdf中的数据