odoo13实现date字段可以在日期控件里只选择到年、月,但是由于odoo里定义的字段是date类型,所以即便这里选择的是年、月,最终保存到数据库的数据还是保存成 YYYY-MM-DD 的格式
1. 定义的字段:
month = fields.Date(string='月份')
year= fields.Date(string='年')
2. xml文件设置日期只选择到月
注意: 只写1个format也可以实现, 但是只写1个viewMode不行,会导致选择了月后还是会跳转到选择日期的界面,并且只第一次打开的时候是选择到月的
<!-- 展示到月 -->
<field name="month" options="{'datepicker': {'viewMode': 'months', 'format': 'YYYY-MM'}}"/>
<!-- 展示到月,只写1个format也可以实现 -->
<field name="month" options="{'datepicker': {'format': 'YYYY-MM'}}"/>
3. 展示到年:
<!-- 展示到年 -->
<field name="year" options="{'datepicker': {'viewMode': 'years', 'format': 'YYYY'}}"/>
<!-- 展示到年 -->
<field name="year" options="{'datepicker': {'format': 'YYYY'}}"/>
参考文件:
1. 该日期控件的js文件是:tempusdominus.js
文件在项目中的完整路径: addons/web/static/lib/tempusdominus/tempusdominus.js
参考部分代码:
DateTimePicker 中定义的字段:
var DateTimePicker = function ($, moment) {
...
ViewModes = ['times', 'days', 'months', 'years', 'decades'], # 这里定义的viewMode可选择的参数
...
var MinViewModeNumber = 0,
Default = {
timeZone: '',
format: false, # 定义日期格式化
dayViewHeaderFormat: 'MMMM YYYY',
extraFormats: false,
stepping: 1,
minDate: false, # 定义可选择的最小日期
maxDate: false, # 定义可选择的最大日期
...
viewMode: 'days', # 定义默认展示的日期格式
...
...
)}
2. 参考了其它链接里的写法,但是不生效或者出现问题,如果以上的写法不适合当前的项目,可以尝试以下链接的写法:
链接1:
(该链接下的方法写的是适用odoo10环境,我的odoo13环境,安装了指定模块后界面直接打不开了,删除该模块的代码后又项目又正常了。odoo10环境可以尝试下)
链接2:
Year and month picker | Odoo Apps Store
(该链接下的项目打开404,直接使用不生效)