Index: django/newforms/fields.py
===================================================================
--- django/newforms/fields.py (revision 6372)
+++ django/newforms/fields.py (working copy)
@@ -11,7 +11,9 @@
from django.utils.encoding import StrAndUnicode, smart_unicode
from util import ErrorList, ValidationError
-from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple
+from widgets import (TextInput, PasswordInput, HiddenInput,
+ MultipleHiddenInput, FileInput, CheckboxInput, Select,
+ NullBooleanSelect, SelectMultiple, DateTimeInput)
try:
from decimal import Decimal, DecimalException
@@ -284,6 +286,7 @@
)
class DateTimeField(Field):
+ widget = DateTimeInput
def __init__(self, input_formats=None, *args, **kwargs):
super(DateTimeField, self).__init__(*args, **kwargs)
self.input_formats = input_formats or DEFAULT_DATETIME_INPUT_FORMATS
Index: django/newforms/widgets.py
===================================================================
--- django/newforms/widgets.py (revision 6372)
+++ django/newforms/widgets.py (working copy)
@@ -7,6 +7,11 @@
except NameError:
from sets import Set as set # Python 2.3 fallback
+try:
+ import settings
+except ImportError:
+ pass
+
from itertools import chain
from django.utils.datastructures import MultiValueDict
from django.utils.html import escape
@@ -15,7 +20,7 @@
from util import flatatt
__all__ = (
- 'Widget', 'TextInput', 'PasswordInput',
+ 'Widget', 'TextInput', 'DateTimeInput', 'PasswordInput',
'HiddenInput', 'MultipleHiddenInput',
'FileInput', 'Textarea', 'CheckboxInput',
'Select', 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect',
@@ -84,6 +89,24 @@
class TextInput(Input):
input_type = 'text'
+class DateTimeInput(Input):
+ input_type = 'text'
+
+ def __init__(self, attrs=None, format=None):
+ self.attrs = attrs or {}
+ self.format = format
+ if not self.format:
+ try:
+ self.format = settings.DATETIME_FORMAT
+ except: # Silently catch exceptions
+ self.format = 'Y-m-d h:i:s'
+
+ def render(self, name, value, attrs=None):
+ from django.utils.dateformat import format
+ return super(DateTimeInput, self).render(name,
+ format(value, self.format),
+ attrs)
+
class PasswordInput(Input):
input_type = 'password'
Index: tests/regressiontests/forms/tests.py
===================================================================
--- tests/regressiontests/forms/tests.py (revision 6372)
+++ tests/regressiontests/forms/tests.py (working copy)
@@ -848,6 +848,22 @@
>>> w.render('date', datetime.datetime(2006, 1, 10, 7, 30))
u''
+# DateTimeInput ###############################################################
+
+>>> w = DateTimeInput()
+>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34, 482548))
+u''
+>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34))
+u''
+>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51))
+u''
+>>> w = DateTimeInput(format='h:i:s')
+>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34, 482548))
+u''
+>>> w = DateTimeInput(format='x:c:p')
+>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34, 482548))
+u''
+
##########
# Fields #
##########