Django - DateTime 小部件格式
Posted
技术标签:
【中文标题】Django - DateTime 小部件格式【英文标题】:Django - DateTime Widget format 【发布时间】:2012-05-01 02:51:48 【问题描述】:我正在尝试实现 DateTimePicker 小部件。
小部件
class DateTimeWidget(forms.DateTimeInput):
class Media:
js = ('js/jquery-ui-timepicker-addon.js',)
def __init__(self, attrs=None):
if attrs is not None:
self.attrs = attrs.copy()
else:
self.attrs = 'class': 'datetimepicker'
表格
class SessionForm(forms.ModelForm):
class Meta:
model = Event
widgets = 'start_time': DateTimeWidget(),
'end_time': DateTimeWidget()
模板
form.media
<form action="/event/post" method="post">% csrf_token %
form.as_p
</form>
<script type="text/javascript">
$('.datetimepicker').datetimepicker(
dateFormat: 'yy-mm-dd'
);
</script>
DateTimePicker 渲染良好,但格式为默认格式 %Y-%m-%d %H:%M:%S
我怎样才能删除秒(有 %Y-%m-%d %H:%M)?
编辑
我正在努力
<input type="text" class="datetimepicker" value="2012-04-18 11:01" />
而不是
<input type="text" class="datetimepicker" value="2012-04-18 11:01:05" />
【问题讨论】:
【参考方案1】:为您的 DateTimeInput
实例提供 format
参数:
class DateTimeWidget(forms.DateTimeInput):
class Media:
js = ('js/jquery-ui-timepicker-addon.js',)
def __init__(self, attrs=None):
if attrs is not None:
self.attrs = attrs.copy()
else:
self.attrs = 'class': 'datetimepicker'
if not 'format' in self.attrs:
self.attrs['format'] = '%Y-%m-%d %H:%M'
如果attrs
字典中没有指定format
,这将默认为您想要的format
字符串:
In [1]: dw = DateTimeWidget()
In [2]: dw.render("foo", "bar")
Out[1]: u'<input value="bar" type="text" class="datetimepicker" \
name="foo" format="%Y-%m-%d %H:%M" />'
如果需要,你可以覆盖格式,比如%Y-%m-%d
:
In [3]: dw = DateTimeWidget('format': "%Y-%m-%d")
In [4]: dw.render("foo", "bar")
Out[4]: u'<input type="text" name="foo" value="bar" format="%Y-%m-%d" />'
要在.render()
方法中操作value
,您可以使用:
In [5]: dw = DateTimeWidget()
In [6]: now = datetime.now()
In [7]: dw.render("foo", now.strftime('%Y-%m-%d %H:%M'))
Out[7]: u'<input value="2012-04-19 17:17" type="text" class="datetimepicker" \
name="foo" format="%Y-%m-%d %H:%M" />'
或者您可以像这样覆盖DateTimeWidget
中的render
:
def render(self, name, value, attrs=None):
value = value.strftime(self.attrs['format'])
return super(forms.DateTimeInput, self).render(name, value, attrs)
这将给出以下输出(无需调用.strftime()
):
In [8]: dw = DateTimeWidget()
In [9]: dw.render("foo", datetime.now())
Out[9]: u'<input value="2012-04-19 17:27" type="text" class="datetimepicker" \
name="foo" format="%Y-%m-%d %H:%M" />'
希望对您有所帮助。
【讨论】:
用更新后问题的解决方案更新了我的答案:)以上是关于Django - DateTime 小部件格式的主要内容,如果未能解决你的问题,请参考以下文章