Как создать отчет с пользовательскими данными и использовать эти данные в отчете QWEB?

я хочу передать данные в отчет qweb и распечатать эти данные в отчете.

код питона:

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, я не вижу значения переменной.


person Tahirhan    schedule 02.07.2019    source источник


Ответы (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. Перейдите по этой ссылке для создания пользовательских отчетов с использованием файлов 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,
    }

Если данные представляют собой некоторую функцию, вызовите эту функцию в строках и строках ['поле'], чтобы получить данные в формате pdf.

person Thayif kabir    schedule 03.07.2019
comment
Спасибо, но мне нужно передать переменную в методе get_pdf, потому что мне нужен pdf в качестве вывода. - person Tahirhan; 04.07.2019
comment
odoo сначала отображает pdf-запись как html, а затем преобразует ее в pdf с помощью wkhtmltopdf. Так что это должно работать так же - person Mangocherry; 04.07.2019
comment
@TahirHan Этот метод используется для передачи данных в pdf. - person Thayif kabir; 04.07.2019
comment
Спасибо за комментарии, согласно вашим комментариям, как я могу преобразовать вывод функции ответа @Thayifkabir в pdf? я проверил это, это тоже строка, но результаты методов get_pdf и render разные. кодирование их с помощью base64 дает разные результаты. - person Tahirhan; 04.07.2019
comment
@TahirHan Если вы используете odoo11 или odoo12, render_html был заменен функцией get_report_values - person Thayif kabir; 04.07.2019
comment
@Thayifkabir Я использую odoo 10 :( - person Tahirhan; 04.07.2019
comment
Вы также можете использовать отдельную функцию для получения данных и передачи строк, как в odoo11, и вызывать ее в xml. - person Thayif kabir; 04.07.2019