扫码阅读
手机扫码阅读
自定义Odoo13widget(实现Odoo日历区间选择,只能选择当前日期及以后的时间)
103 2024-02-28
需求说明:
在创建需要的选择日期的数据时,有时会有不能选择当前日期之前时间的限制,针对这样的需求开发了一个自定义的widget
实现方式:
首先找到odoo中现有的关于日期的widget,参考其写法,odoo存在date和detatime两个widget,可以根据自己的字段类型来扩展widget
代码如下:
odoo.define('dboms.db_date_widget', function (require) {
;
var registry = require('web.field_registry');
var FieldDate = require('web.basic_fields').FieldDate;
var datepicker = require('web.datepicker');
var section_date = FieldDate.extend({
// 重写此方法
_makeDatePicker: function () {
let newDate = moment();
// 把当前时间传入日历暴露出来的minDate属性
this.datepickerOptions['minDate'] = moment({Y:newDate.year(), M:newDate.month(), d:newDate.date()});
return new datepicker.DateWidget(this, this.datepickerOptions);
},
})
// 注册名称为db_date_widget的widget
registry.add('db_date_widget', section_date);
});
说明:
odoo.define('dboms.db_date_widget', function (require) 定义一个widget的固定写法, 'dboms.db_date_widget' 可以理解为注册的类名
在xml中 增加widget属性
'create_date' string='创建日期' widget='db_date_widget'/>
默认日历效果
启用自定义widget后的效果
注意:如果在日期字段上设置了限制了日期选择,那么如果存在历史数据,例如限制只能选择当前日期之后的日期,那么如果存在前一天保存的数据,今天查看编辑页面的时候会报错,
这是因为带入默认值的时候会有一个验证,会去比较传入日期是否小于设置的最小日期,所以在使用时需要考虑清楚具体的使用场景,虽然可以通过修改源码,去掉报错提示,但是,过多的修改源码,会给odoo升级带来额外的麻烦,还需谨慎对待。
原文链接:
http://mp.weixin.qq.com/s?__biz=Mzg5MzUyOTgwMQ==&mid=2247487108&idx=1&sn=3ac1a228bc94067152efe85bd1215df9&chksm=c02c3522f75bbc3452f61f3019c6f327d98dea5e837573c960359fafd59c6045ae8d171b6366#rd
神州数码云基地的其他文章
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设
白皮书上线