【问题标题】:How to create a report with custom data and use that data in QWEB report?如何使用自定义数据创建报告并在 QWEB 报告中使用该数据?
【发布时间】:2019-07-02 14:24:05
【问题描述】:

我想将数据传递给 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 文件时,我看不到变量值。

【问题讨论】:

    标签: pdf report odoo qweb


    【解决方案1】:

    尝试使用此代码传递数据

    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,
        }
    

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

    【讨论】:

    • 谢谢,但我需要在 get_pdf 方法中传递变量,因为我需要 pdf 作为输出。
    • odoo 首先将 pdf 记录呈现为 html,然后使用 wkhtmltopdf 将其转换为 pdf。所以它应该以同样的方式工作
    • @TahirHan 这个方法用来传数据到pdf
    • 感谢 cmets,根据您的 cmets,我如何将 @Thayifkabir 的 answer 函数的输出转换为 pdf?我检查了它,它也是一个字符串,但 get_pdf 和渲染方法的输出不同。用 base64 编码会得到不同的结果。
    • @TahirHan 如果你正在唱 odoo11 或 odoo12,render_html 被替换为函数 get_report_values
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多