Skip to content

Commit fa266dd

Browse files
committed
Fixed HTMLFormRenderer empty datetime value.
1 parent 30d58a7 commit fa266dd

2 files changed

Lines changed: 14 additions & 5 deletions

File tree

rest_framework/renderers.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ def render_field(self, field, parent_style):
345345
except AttributeError:
346346
format_ = api_settings.DATETIME_FORMAT
347347

348-
if format_ is not None:
348+
if format_ is not None and field.value not in (None, ''):
349349
# field.value is expected to be a string
350350
# https://www.django-rest-framework.org/api-guide/fields/#datetimefield
351351
field_value = field.value
@@ -358,10 +358,11 @@ def render_field(self, field, parent_style):
358358
else datetime.datetime.strptime(field_value, format_)
359359
)
360360

361-
# The format of an input type="datetime-local" is "yyyy-MM-ddThh:mm"
362-
# followed by optional ":ss" or ":ss.SSS", so keep only the first three
363-
# digits of milliseconds to avoid browser console error.
364-
field.value = field.value.replace(tzinfo=None).isoformat(timespec="milliseconds")
361+
if isinstance(field.value, datetime.datetime):
362+
# The format of an input type="datetime-local" is "yyyy-MM-ddThh:mm"
363+
# followed by optional ":ss" or ":ss.SSS", so keep only the first three
364+
# digits of milliseconds to avoid browser console error.
365+
field.value = field.value.replace(tzinfo=None).isoformat(timespec="milliseconds")
365366

366367
if 'template' in style:
367368
template_name = style['template']

tests/test_renderers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,14 @@ def test_datetime_field_rendering_timezone_aware_datetime(self):
566566
"2024-12-23T09:55:30.345" # Rendered in -06:00
567567
)
568568

569+
def test_datetime_field_rendering_empty_string_raises_no_error(self):
570+
"""
571+
Regression test for #9927 (issue):
572+
Ensures that an empty string value doesn't cause a ValueError
573+
when the HTMLFormRenderer tries to parse it via fromisoformat.
574+
"""
575+
self._assert_datetime_rendering("", "")
576+
569577

570578
class TestHTMLFormRenderer(TestCase):
571579
def setUp(self):

0 commit comments

Comments
 (0)