odoo14打印报表详解

标题打印报表详解

定义一个需要打印按钮的模型

# -*- coding: utf-8 -*-

from odoo import models, fields, api


class openshoes(models.Model):
    _name = 'openshoes.openshoes'
    _description = 'openshoes.openshoes'

    c_name = fields.Char('工厂名称')
    price = fields.Float('金额')
    name = fields.Char('负责人')
    date_1 = fields.Date('订单日期')
    type = fields.Selection(selection=[('sample', '样品'), ('development', '开发'), ('production', '批量')], string="测试性质",
                            help="选择", default="sample")

创建一个report的python文件夹,项目结构后面有

创建一个openshoes_report_pzqweb.py

这里拿我本地项目举例

from odoo import models, api

class report2(models.Model):
    # _name内容由三个部分组成  report+关联模块名+openshoes_report_pzqweb.xml模板id组成(后面创建的xml文件,在下面)
    _name = 'report.openshoes.report_library_book_template'

    def _get_data(self,ids):
        #sql语句查询模型表
        sql = "select * from openshoes_openshoes"
        # 四种查询方法
        # cr.dictfetchall() 得到 [{'reg_no': 123},{'reg_no': 543},]
        # cr.dictfetchone() 得到 {'reg_no': 123}
        # cr.fetchall() 得到 '[(123),(543)]'
        # cr.fetchone() 得到 '(123)'
        # 参考https://blog.youkuaiyun.com/qq_29654325/article/details/78019686
        self.env.cr.execute(sql)
        # DictObj类实现dict转为对象属性,从而数据访问可以通过对象方式访问
        #例data2['name']转换成data2.name
        # 参考https://blog.youkuaiyun.com/hk52222/article/details/103214581
        return DictObj(self.env.cr.dictfetchall()[0])

    @api.model
    def _get_report_values(self,docids,data= None):
        docArgs = {
            'title2':"Test Title",
            'data2':self._get_data(docids)
                   }
        return docArgs

class DictObj(object):
    def __init__(self, map):
        self.map = map

    def __setattr__(self, name, value):
        if name == 'map':
            object.__setattr__(self, name, value)
            return;
        print('set attr called ', name, value)
        self.map[name] = value

    def __getattr__(self, name):
        v = self.map[name]
        if isinstance(v, (dict)):
            return DictObj(v)
        if isinstance(v, (list)):
            r = []
            for i in v:
                r.append(DictObj(i))
            return r
        else:
            return self.map[name];

    def __getitem__(self, name):
        return self.map[name]

创建一个openshoes_report_pzqweb.xml

<?xml version="1.0"?>
<odoo>
    <data>
<!--        参数介绍
            id自取
            string名自取
            model为关联打印模型
            report_type:可以取两个值,qweb-html,qweb_pdf
            name为模型名+下方模板id
-->
        <report id="action_library_book_report"
                string="打印"
                model="openshoes.openshoes"
                report_type="qweb-html"
                name="openshoes.report_library_book_template"
        />
<!--        上方所需要的模板id,report_library_book_template-->
        <template id="report_library_book_template">
            <t t-call="web.html_container">
                <t t-call="web.external_layout">
                    <div class="page">
<!--                        title2传递的测试数据-->
                        <t t-esc="title2"/>
                        <h2>Report title</h2>
                        <p>This object's name is
<!--                        data2.name传递的测试数据-->
                            <t t-esc="data2.name"/>
                        </p>
                    </div>
                </t>
            </t>
        </template>

    </data>
</odoo>

openshoes.openshoes模型视图自写

最后是三个导入

  1. 在这里插入图片描述
  2. List item
  3. List item

最后得到

在这里插入图片描述
并且点击打印可以得到pdf文件。

至此结束。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值