Odoo提供建立report的功能,透过wkhtmltopdf来输出pdf,我们来写一个简单的范例,能够印出学生的姓名、绰号、所属学校。
首先增加档案 /reports/res_student_report.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="report_student_id_card">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="web.external_layout">
<div class="page">
<h2>Student Report</h2>
<div>
<p>Name: <span t-field="o.name"/></p>
</div>
<div>
<p>Nickname: <span t-field="o.nickname"/></p>
</div>
<div>
<p>School: <span t-field="o.school_id.name"/></p>
</div>
</div>
</t>
</t>
</t>
</template>
<report
id="report_student"
model="res.student"
string="Student report"
report_type="qweb-pdf"
name="student.report_student_id_card"
file="student.report_student_id_card"
print_report_name="'学生资讯 %s' % (object.name)"
/>
</odoo>
我们分为两个部分来解释
Odoo 的Template代表画面,是用Qweb撰写,将xml转译成html
<template id="report_student_id">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="web.external_layout">
<div class="page">
<h2>Student Report</h2>
<div>
<p>Name: <span t-field="o.name"/></p>
</div>
<div>
<p>Nickname: <span t-field="o.nickname"/></p>
</div>
<div>
<p>School: <span t-field="o.school_id.name"/></p>
</div>
</div>
</t>
</t>
</t>
</template>
id
:自定义,不重复即可
t
:以t开头的为Qweb写法,基本上一开始写的是一样的
t-call="web.external_layout
:提供我们基本的header与footer
<t t-foreach="docs" t-as="o">
:代表遍历整个records,像是python的 for o in records:
t-as
是帮你的model的名称
t-field
:配上之前设定的model object可以拿到底下的field
只要知道Qweb代表的意义,可以写出基本的画面,另外也有t-if
等逻辑判断帮助report更加完善
<report
id="report_student"
model="res.student"
string="Student report"
report_type="qweb-pdf"
name="res_student.report_student_id"
file="res_student.report_student_id"
print_report_name="'学生资讯 %s' % (object.name) +'.pdf'"
/>
report就是汇出档案的设定
id
:自定义,不重复即可
model
:关联的model name
string
:显示的Action button name
report_type
:输出模式,预设为qweb-pdf
,另外还有qweb-html
,会以网页的方式呈现
name
file
:串连template的设定,格式为model.template_id
print_report_name
:输出档案名称
设定好之後我们将reports加入__manifest__.py
里
'data': [
'reports/student_report.xml'
...
],
重启之後我们便可以在页面看到多了一个print button:
点选之後即会下载pdf到电脑中,而我们印出其中三个field,档名也与设定的一致:
同样Odoo也提供介面去操作Reports,当然也可以设定权限,或是修改相关资讯
今天就介绍到这边了,如果要客制化Report,可以利用一些base template可以减少花的时间,这部分建议多看source code的写法比较可以掌握Qweb的用法。
这应该是这次参赛的最後作品了 来挑战用jQuery做一个ToDoList 首先先写简单的架构 一个i...
要把物件边角变得圆圆润润的,首先都会想到border-radius 初学者刚会用的时候只会设定一个值...
前言 这篇主要以抓「台湾证券交易所」的「除权除息计算结果表」为主 取得「除权除息计算结果表」CSV ...
我们先看看以下这些知名的团队运动的状况: 在棒球的规则中,各国一军日常可以登录25-29名球员,约在...
惯例先上成果图XD https://asciinema.org/a/439607 终於开机开到she...