2012-04-19 17 views
2

我正在尝试实施DateTimePicker小工具。Django - DateTime小工具格式

的Widget

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很好地渲染ED但格式是默认的一个%Y-%间 - %d%H:%M:%S

我怎样才能去除秒(有%Y-%间 - %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" /> 

回答

3

供应format参数为您DateTimeInput实例:

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' 

如果没有format规范是attrs字典中给出的这将默认为您所需的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" />' 

希望有所帮助。

+0

请参阅我的编辑 – 2012-04-19 15:07:32

+0

用更新后的问题的解决方案更新了我的答案:) – cfedermann 2012-04-19 15:18:31