扫码阅读
手机扫码阅读

自定义Odoo13widget(实现Odoo日历区间选择,只能选择当前日期及以后的时间)

103 2024-02-28

需求说明:

在创建需要的选择日期的数据时,有时会有不能选择当前日期之前时间的限制,针对这样的需求开发了一个自定义的widget

实现方式:

首先找到odoo中现有的关于日期的widget,参考其写法,odoo存在date和detatime两个widget,可以根据自己的字段类型来扩展widget

代码如下:

odoo.define('dboms.db_date_widget', function (require) { "use strict";  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