You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义deform.widget.DateTimeInputWidget移除时间秒数

解决方案

要去掉deform.widget.DateTimeInputWidget的秒数,只保留24小时制的小时和分钟,核心是搞清楚pickadate.js的时间格式规则(和Python的strftime语法不同),再正确配置time_options参数:

  1. 明确pickadate.js的格式规则
    你看到的h:i A是pickadate.js的专属格式语法,对应到你要的24小时制小时+分钟格式,需要用:
  • H:24小时制小时(带前导零,范围00-23)
  • i:分钟(带前导零,范围00-59)
    组合起来就是H:i,对应你要的00:01、18:00这类格式。
  1. 配置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,
    }
)

配置完成后,时间选择器就只会显示小时和分钟输入栏,用户无需填写秒数。

  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:00:09