diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 8541bc43a..7bac2a21f 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1061,6 +1061,9 @@ class DateTimeField(Field): self.fail('invalid', format=humanized_format) def to_representation(self, value): + if not value: + return None + output_format = getattr(self, 'format', api_settings.DATETIME_FORMAT) if output_format is None: @@ -1118,11 +1121,11 @@ class DateField(Field): self.fail('invalid', format=humanized_format) def to_representation(self, value): - output_format = getattr(self, 'format', api_settings.DATE_FORMAT) - if not value: return None + output_format = getattr(self, 'format', api_settings.DATE_FORMAT) + if output_format is None: return value @@ -1183,6 +1186,9 @@ class TimeField(Field): self.fail('invalid', format=humanized_format) def to_representation(self, value): + if not value: + return None + output_format = getattr(self, 'format', api_settings.TIME_FORMAT) if output_format is None: diff --git a/tests/test_fields.py b/tests/test_fields.py index 9cb59f7da..029a5bddc 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -959,7 +959,9 @@ class TestDateTimeField(FieldValues): } outputs = { datetime.datetime(2001, 1, 1, 13, 00): '2001-01-01T13:00:00', - datetime.datetime(2001, 1, 1, 13, 00, tzinfo=timezone.UTC()): '2001-01-01T13:00:00Z' + datetime.datetime(2001, 1, 1, 13, 00, tzinfo=timezone.UTC()): '2001-01-01T13:00:00Z', + None: None, + '': None, } field = serializers.DateTimeField(default_timezone=timezone.UTC()) @@ -1028,7 +1030,9 @@ class TestTimeField(FieldValues): '99:99': ['Time has wrong format. Use one of these formats instead: hh:mm[:ss[.uuuuuu]].'], } outputs = { - datetime.time(13, 00): '13:00:00' + datetime.time(13, 00): '13:00:00', + None: None, + '': None, } field = serializers.TimeField()