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:固定写法,就跟把查到的值赋给表一样