Skip to content

Commit 85b4d34

Browse files
committed
Apply changes suggested by peterthomassen (conditionals + test)
1 parent 2bad745 commit 85b4d34

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

rest_framework/renderers.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -339,22 +339,25 @@ def render_field(self, field, parent_style):
339339
style['template_pack'] = parent_style.get('template_pack', self.template_pack)
340340
style['renderer'] = self
341341

342-
# Get a clone of the field with text-only value representation.
342+
# Get a clone of the field with text-only value representation ('' if None or False).
343343
field = field.as_form_field()
344344

345345
if style.get('input_type') == 'datetime-local':
346-
if hasattr(field._field, "format"):
347-
if field._field.format is None:
348-
# `to_representation` returned a Python datetime object
349-
# https://www.django-rest-framework.org/api-guide/fields/#datetimefield
350-
datetime_field_value = field.value
351-
else:
352-
datetime_field_value = datetime.datetime.strptime(field.value, field._field.format)
346+
try:
347+
format = field._field.format
348+
except AttributeError:
349+
format = api_settings.DATETIME_FORMAT
350+
351+
if format is None:
352+
# field.value is a datetime
353+
# https://www.django-rest-framework.org/api-guide/fields/#datetimefield
354+
datetime_field_value = field.value
353355
else:
354-
if api_settings.DATETIME_FORMAT == ISO_8601:
355-
datetime_field_value = datetime.datetime.fromisoformat(field.value.rstrip('Z'))
356-
else:
357-
datetime_field_value = datetime.datetime.strptime(field.value, api_settings.DATETIME_FORMAT)
356+
# field.value is expected to be a string
357+
datetime_field_value = (
358+
datetime.datetime.fromisoformat(field.value.rstrip('Z')) if format == ISO_8601
359+
else datetime.datetime.strptime(field.value, format)
360+
)
358361

359362
# The format of an input type="datetime-local" is "yyyy-MM-ddThh:mm"
360363
# followed by optional ":ss" or ":ss.SSS", so keep only the first three

tests/test_renderers.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,13 @@ def test_datetime_field_rendering_with_custom_datetime_format(self):
556556
"2024-12-24T00:55:00.000"
557557
)
558558

559+
@override_settings(REST_FRAMEWORK={'DATETIME_FORMAT': None})
560+
def test_datetime_field_rendering_datetime_format_is_none(self):
561+
self._assert_datetime_rendering(
562+
datetime(2024, 12, 24, 0, 55, 30, 345678),
563+
"2024-12-24T00:55:30.345"
564+
)
565+
559566

560567
class TestHTMLFormRenderer(TestCase):
561568
def setUp(self):

0 commit comments

Comments
 (0)