ODOO报表:在数据中查询数据def init(self)方法

在Odoo的report文件中创建.py文件,用于定义新模型。通过设置_auto=False避免自动在数据库中创建表。init方法在每次页面加载时执行,进行数据库查询。CREATEORREPLACEVIEW用于定义视图,结合LEFTJOIN进行多表联查,同时使用CASEWHEN处理空值情况,计算日期差并应用MAX函数。文章还讨论了GROUPBY在聚合查询中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在report文件加中新建.py文件,创建新模型。

注意:_auto=False,解释:# 告诉odoo我们自己管理这个表,当_auto=True时会在数据库中字段创建表,如果等于False就不会在数据库中创建表。

如果_auto=True,当我们写init中的查询语句时会报错,提示我们数据库中存在这个表我们需要drop(删除)

 2、写init方法

我们每次打开这个页面都会去调用init这个方法,去数据库中查一遍数据。

line 20:固定写法,我也不知道什么意思

line21-line37查询语句,

CREATE OR REPLACE VIEW 当前模型名称(要把.换成_),{

        SELECT(经典数据库查询起手式) 注意后边的pp.id as id,(这个一定要有,要不然报错,说找不到表的id,要把你查询的数据id赋给表,当作表的id)

pp(某个表的简称,至于是哪个表在from中声明).id(然后点表中的某个数据)  as(赋予)product_id(新表中的哪个字段)(我上下两张图是连在一起的可以整天来看,比较清楚)

max(sml.date)(这里的max指取sml.date的最大值,如果想要使用max需要使用GROUP BY聚合,我也不知道聚合的具体作用,就是知道如果不聚合就会报错,还是要聚合那些没有使用函数的字段)

CASE WHEN(因为我用的postgresql数据库,所以这里相当于if) sml.date IS NOT NULL(判断条件,当sml表中的date不为空时 走then) THEN(走的方法) now()::date - sml.date::date(当前时间减去sml表中的时间,加::date的意思时取差的天数,同样还是postgresql这样写,其余的数据库我不知道) ELSE(有if当然要有else,不解释) 0 as(赋予) (新表中的某个字段)

(以上每行赋予都需要逗号隔开,但是from之前的赋予不能加逗号)

FROM (从哪个表中查找)product_product  as 将表的名称简写 pp

明天再写

今天继续

left join (我的理解是,这是表联查。我联查了stock_move_line表,) as  sml(将表简写成sml), on(然后)sml.product_id = pp.id(是两个表链接的条件,查找sml表中字段product_id等于pp表中id的数据)  AND (与或非中的与,不多说) 增加搜索条件

left join (联查多个表)

WHERE 增加数据搜索的条件,这个和on 之后有啥区别我明白意思但是不会描述,自己去试(只可意会不可言传)

GROUP BY (聚合字段,这里的聚合我不明白啥意思,只知道如果没有聚合max()函数不能用)

}

line38:固定写法,就跟把查到的值赋给表一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值