


本期内容
日历视图改造
odoo日历模块相信大家都比较熟悉了~直接在相应日期上填写计划就可以简洁直观的看出一天乃至一月的日程安排。
不过如果一天之中想添加多个日程,就要不停点击创建。
那么我们何妨不研究一下如何实现在日历中批量添加日程!
探索原理
大部分公司都会使用周报系统,我们就以此为例,看看应该如何基于Odoo改造视图,提升效率。
我们先看一下常规的代码:
不难看出,该视图的侧重点是重点工作,其字段类型是Many2one,这也符合日历视图规范。
Odoo原生效果图如下:
为了达到批量添加的目的,势必要对此视图进行改造。
我们不免想到了odoo的One2many字段,将该类型字段铺到form视图时,会出现“保存并关闭”、“保存并新建”的按钮,如果我们可以借鉴,岂不是皆大欢喜?
经过页面调试可知,在日历视图中点击创建并不是弹出一个Form视图,而是一个Dialog对话框,因此也不能按照寻常方式进行FormController改造。
进一步调试可知,点击创建的时候调用的calendar_controller.js的_onOpenCreate方法,然后去底层的FormViewDialog渲染出按钮。
在FormViewDialog里,odoo通过multi_select来判断按钮样式,而multi_select与options的disable_multiple_selection属性息息相关。
因为前一项!_.isNumber(options.res_id)在创建情况下永远为true。
换言之,只要option的disable_multiple_selection为false,那么页面就会渲染出“保存并新建”按钮。部分源码如下:
改造步骤
通过前文的探索,我们发现不能使用常规的方法,同时直接在源码上修改也是不可取的,毕竟一旦修改,全局生效。
所以我们就去calendar_controller.js的_onOpenCreate方法里找找odoo原生是如何给disable_multiple_selection赋值的。
果不其然!原生方法里odoo直接给disable_multiple_selection赋值为true,那么我们就可以另外新建一个js重写_onOpenCreate方法,修改disable_multiple_selection。
代码如下:
导入该js后,在日历视图中添加js_class='ics_calendar_button'属性并进行升级后,就可以在日历视图中批量添加日程了。
你还想了解Odoo哪些好用的功能?欢迎在后台留言给我们哦~


本期内容就到这里啦
有更好的办法或疑问请
⬇欢迎加入社群一起讨论哦⬇
本期作者
数据开发工程师 查晶晶


更多精彩内容
了解云基地,就现在!
IT技术哪家强
神州数码最在行
行业新星,后起之秀
历史虽不长,但是实 力 强

























