aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/fields.py
diff options
context:
space:
mode:
Diffstat (limited to 'rest_framework/fields.py')
-rw-r--r--rest_framework/fields.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index 327008fb..236e0f1e 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -18,6 +18,7 @@ from rest_framework.compat import timezone
from rest_framework.compat import BytesIO
from rest_framework.compat import six
from rest_framework.compat import smart_text
+from rest_framework.compat import parse_time
def is_simple_callable(obj):
@@ -531,6 +532,33 @@ class DateTimeField(WritableField):
raise ValidationError(msg)
+class TimeField(WritableField):
+ type_name = 'TimeField'
+ widget = widgets.TimeInput
+ form_field_class = forms.TimeField
+
+ default_error_messages = {
+ 'invalid': _("'%s' value has an invalid format. It must be a valid "
+ "time in the HH:MM[:ss[.uuuuuu]] format."),
+ }
+ empty = None
+
+ def from_native(self, value):
+ if value in validators.EMPTY_VALUES:
+ return None
+
+ if isinstance(value, datetime.time):
+ return value
+
+ try:
+ parsed = parse_time(value)
+ assert parsed is not None
+ return parsed
+ except ValueError:
+ msg = self.error_messages['invalid'] % value
+ raise ValidationError(msg)
+
+
class IntegerField(WritableField):
type_name = 'IntegerField'
form_field_class = forms.IntegerField