如何自定义deform.widget.DateTimeInputWidget移除时间秒数
解决方案
要去掉deform.widget.DateTimeInputWidget的秒数,只保留24小时制的小时和分钟,核心是搞清楚pickadate.js的时间格式规则(和Python的strftime语法不同),再正确配置time_options参数:
- 明确pickadate.js的格式规则
你看到的h:i A是pickadate.js的专属格式语法,对应到你要的24小时制小时+分钟格式,需要用:
H:24小时制小时(带前导零,范围00-23)i:分钟(带前导零,范围00-59)
组合起来就是H:i,对应你要的00:01、18:00这类格式。
- 配置DateTimeInputWidget
创建Widget实例时,通过time_options指定格式,Deform支持两种写法:
写法1:和默认风格一致的元组格式
from deform.widget import DateTimeInputWidget custom_datetime_widget = DateTimeInputWidget( time_options=( ("format", "H:i"), ("interval", 1), # 可按需设置分钟间隔,比如设15就是每15分钟一步 ) )
写法2:直接传入字典格式
custom_datetime_widget = DateTimeInputWidget( time_options={ "format": "H:i", "interval": 1, } )
配置完成后,时间选择器就只会显示小时和分钟输入栏,用户无需填写秒数。
- 后端数据一致性补充
如果需要确保后端存储的时间秒数为0,可以在表单Schema里添加预处理逻辑:
from colander import DateTime, SchemaNode class MySchema(SchemaNode): created_at = SchemaNode( DateTime(), widget=custom_datetime_widget, preparer=lambda dt: dt.replace(second=0, microsecond=0) )
这样不管前端是否传入秒数,后端都会统一把秒和微秒置为0,保证数据格式统一。
内容的提问来源于stack exchange,提问作者swiss_knight
相关产品推荐
相关产品推荐

