2012-04-19 62 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