odoo--打印功能(qweb_report)下载pdf

odoo--打印功能(qweb_report)下载pdf

  • 在项目文件夹“my_cats”的data文件夹中创建一个文件"cat_report.xml",用于配置说明哪个模块需要增加下载pdf的功能
  • 在这里插入图片描述
  • 写入代码:
<odoo>
    <report
            id="report_mycat"
            model="my.cats"
            string="下载猫猫信息报告"
            name="my_cats.report_myproject_report_templates"
            print_report_name = "'猫猫报告'+ str(object.code)"
            report_type="qweb-pdf" />
</odoo>
<!-- 
            id:节点id
            model:生成报告的模块名
            string:UI显示用于下载报告按钮的文本
            name:调用生成报告的方法名
            print_report_name:返回报告的名称。 点击打印或下载按钮时使用此名称来保存下载报告(我这里的报告名引入了模块中的猫猫编号字段“code”)
         -->
  • 在这里插入图片描述
  • 在model文件夹中创建“cat_report.py”文件,用于定义刚刚在文件"cat_report.xml"提到的方法name
    在这里插入图片描述 - 写入代码:
from odoo import api, fields ,models

class ParticularReport(models.AbstractModel):
    _name = 'my_cats.report'

	#重写了odoo的_get_report_values方法
    def _get_report_values(self, docids, data=None):
        
        #定位到odoo存放report的表
        report_obj = self.env['ir.actions.report']
        #找到“cat_report.xml”所定义的name指向的model生成的report
        #使用_get_report_from_name()方法从报告名称返回与报告关联的ir.actions.report的记录
        #'my_cats.report_myproject_report_templates'是指my_cats项目文件夹下名为“report_myproject_report_templates”的配置文件
        report = report_obj._get_report_from_name('my_cats.report_myproject_report_templates')
        #doc_ids是传递给报告模板的记录ID列表,doc_model描述了这些记录所属的模型,docs包含引用self(当前调用该方法的对象)以及其他相关数据的对象。
        docargs = {
            'doc_ids': docids,
            'doc_model': report.model,
            'docs': self,
        }
        return docargs
  • 别忘记在init文件中引入
    在这里插入图片描述
  • 在views视图文件夹下创建“cat_report_template.xml”文件,用于定义报告内容的展示格式
  • 写入代码:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
	<!-- 这里的id引用cat_report.xml定义的name中除去项目名称 -->
    <template id="report_myproject_report_templates">
    <!-- 调用了 Odoo 中内置的名为 web.html_container 的布局模板-->
        <t t-call="web.html_container">
        <!-- 遍历一个叫做 docs 的变量,并把每个元素赋值给一个叫做 doc 的临时变量 -->
            <t t-foreach="docs" t-as="doc">
            <!-- 调用外部布局,即对于该模板所渲染的内容,在呈现时会先套用一个外部的布局文件(通常包含网站头、底部等公共页面结构) -->
                <t t-call="web.external_layout">
                    <div class="page">
                        <h4 style="text-align: center">猫猫信息表</h4>
                        <table style="width: 100%;">
                            <tr>
                                <td class="nowrap" colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: max-content;">猫猫编号</td>
                                <td class="nowrap" colspan="30" style="padding-left: 10px; border: 1px solid black; vertical-align: middle; height:40px; width: max-content;">
                                    <span t-field="doc.code"></span>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 12.5%">名称</td>
                                <td colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 12.5%">
                                    <span t-field="doc.name"></span>
                                </td>
                                <td colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 12.5%">品种类型</td>
                                <td colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 12.5%">
                                    <span t-field="doc.cat_type"></span>
                                </td>
                                <td colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 12.5%">出生日期</td>
                                <td colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 12.5%">
                                    <span t-field="doc.born_date"></span>
                                </td>
                            </tr>
                           <tr>
                                <td class="nowrap" colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: max-content;">猫舍</td>
                                <td class="nowrap" colspan="12" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: max-content;">
                                    <span t-field="doc.cats_home.name"></span>
                                </td>
                                <td class="nowrap" colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: max-content;">入店时间</td>
                                <td class="nowrap" colspan="12" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: max-content;">
                                    <span t-field="doc.doing_date"></span>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:150px; width: 16.67%">收养信息</td>
                                <td colspan="30" style="text-align: center; height:150px; width: 16.67%">
                                    <table style="width: 100%;"> 
                                        <tr>
                                            <td colspan="10" style="text-align: center; vertical-align: middle; height:25px; width: 16.67%">是否被收养</td>
                                            <td colspan="10" style="text-align: center; vertical-align: middle; height:25px; width: 16.67%">最后被收养时间</td>
                                            <td colspan="10" style="text-align: center; vertical-align: middle; height:25px; width: 16.67%">最后归还时间</td>
                                        </tr>
                                        <tr>
                                            <td colspan="10" style="text-align: center; height:150px; width: 16.67%">
                                                <t t-esc="'已领养' if doc.borrowed else '未领养'"/>
                                            </td>
                                            <td colspan="10" style="text-align: center; height:150px; width: 16.67%">
                                                <span t-field="doc.date_last_borrowed"></span>
                                            </td>
                                            <td colspan="10" style="text-align: center; height:150px; width: 16.67%">
                                                <span t-field="doc.date_last_return"></span>
                                            </td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 16.67%">猫咪性格</td>
                                <td colspan="30" style="padding-left: 10px; border: 1px solid black; vertical-align: middle; height:40px; width: 16.67%">
                                    <t t-foreach="doc.personality_id" t-as="personality">
                                        <span t-field="personality.name" />
                                    </t>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 16.67%">备注</td>
                                <td colspan="30" style="padding-left: 10px; border: 1px solid black; vertical-align: middle; height:40px; width: 16.67%">
                                    <span t-field="doc.description"></span>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 16.67%">定价</td>
                                <td colspan="12" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 16.67%">
                                    <span t-field="doc.price"></span>
                                </td>
                                <td colspan="6" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 16.67%">填报人</td>
                                <td colspan="12" style="text-align: center; border: 1px solid black; vertical-align: middle; height:40px; width: 16.67%">
                                    <span t-field="doc.create_user_id.name"></span>
                                </td>
                            </tr>
                        </table>
                    </div>
                </t>
            </t>
        </t>
    </template>
</odoo>
  • 在上述代码中 t-field写入model中定义的字段,若字段涉及many2many,需要增加循环遍历
# model中定义的字段
personality_id = fields.Many2many('personality',string='猫咪性格')
<t t-foreach="doc.personality_id" t-as="personality">
	<span t-field="personality.name" />
</t>
  • 最后别忘记在manifest文件中引入新增的xml文件:
    在这里插入图片描述

  • 呈现效果:List item

在这里插入图片描述

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值