标题打印报表详解
定义一个需要打印按钮的模型
# -*- 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模型视图自写
最后是三个导入
最后得到
并且点击打印可以得到pdf文件。
至此结束。