Skip to content

Commit 18cdfcd

Browse files
committed
Merge pull request #3731 from mjparker777/master
Issue 3726 DateTimeField not handling empty values
2 parents 61e7f7b + d9c3608 commit 18cdfcd

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

rest_framework/fields.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,9 @@ def to_internal_value(self, value):
10611061
self.fail('invalid', format=humanized_format)
10621062

10631063
def to_representation(self, value):
1064+
if not value:
1065+
return None
1066+
10641067
output_format = getattr(self, 'format', api_settings.DATETIME_FORMAT)
10651068

10661069
if output_format is None:
@@ -1118,11 +1121,11 @@ def to_internal_value(self, value):
11181121
self.fail('invalid', format=humanized_format)
11191122

11201123
def to_representation(self, value):
1121-
output_format = getattr(self, 'format', api_settings.DATE_FORMAT)
1122-
11231124
if not value:
11241125
return None
11251126

1127+
output_format = getattr(self, 'format', api_settings.DATE_FORMAT)
1128+
11261129
if output_format is None:
11271130
return value
11281131

@@ -1183,6 +1186,9 @@ def to_internal_value(self, value):
11831186
self.fail('invalid', format=humanized_format)
11841187

11851188
def to_representation(self, value):
1189+
if not value:
1190+
return None
1191+
11861192
output_format = getattr(self, 'format', api_settings.TIME_FORMAT)
11871193

11881194
if output_format is None:

tests/test_fields.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -959,7 +959,9 @@ class TestDateTimeField(FieldValues):
959959
}
960960
outputs = {
961961
datetime.datetime(2001, 1, 1, 13, 00): '2001-01-01T13:00:00',
962-
datetime.datetime(2001, 1, 1, 13, 00, tzinfo=timezone.UTC()): '2001-01-01T13:00:00Z'
962+
datetime.datetime(2001, 1, 1, 13, 00, tzinfo=timezone.UTC()): '2001-01-01T13:00:00Z',
963+
None: None,
964+
'': None,
963965
}
964966
field = serializers.DateTimeField(default_timezone=timezone.UTC())
965967

@@ -1028,7 +1030,9 @@ class TestTimeField(FieldValues):
10281030
'99:99': ['Time has wrong format. Use one of these formats instead: hh:mm[:ss[.uuuuuu]].'],
10291031
}
10301032
outputs = {
1031-
datetime.time(13, 00): '13:00:00'
1033+
datetime.time(13, 00): '13:00:00',
1034+
None: None,
1035+
'': None,
10321036
}
10331037
field = serializers.TimeField()
10341038

0 commit comments

Comments
 (0)