Skip to content

Commit b39982b

Browse files
committed
Apply changes requested by peterthomassen
1 parent 85ca282 commit b39982b

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

rest_framework/renderers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,10 @@ def render_field(self, field, parent_style):
347347
# followed by optional ":ss" or ":ss.SSS", so keep only the first three
348348
# digits of milliseconds to avoid browser console error.
349349
datetime_parts = field.value.split(".")
350-
field.value = f"{datetime_parts[0]}.{datetime_parts[1][:3]}"
350+
if len(datetime_parts) > 1:
351+
field.value = f"{datetime_parts[0]}.{datetime_parts[1][:3]}"
352+
else:
353+
field.value = field.value.rstrip('Z')
351354

352355
if 'template' in style:
353356
template_name = style['template']

tests/test_renderers.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,8 +489,9 @@ class TestSerializer(serializers.Serializer):
489489
assert rendered == ''
490490

491491

492+
@override_settings(TIME_ZONE='UTC', USE_TZ=True)
492493
class TestDateTimeFieldHTMLFormRender(TestCase):
493-
def test_datetime_field_rendering(self):
494+
def test_datetime_field_rendering_milliseconds(self):
494495
class TestSerializer(serializers.Serializer):
495496
appointment = serializers.DateTimeField()
496497

@@ -505,6 +506,36 @@ class TestSerializer(serializers.Serializer):
505506
rendered
506507
)
507508

509+
def test_datetime_field_rendering_no_milliseconds(self):
510+
class TestSerializer(serializers.Serializer):
511+
appointment = serializers.DateTimeField()
512+
513+
appointment = datetime(2024, 12, 24, 0, 55, 30, 0)
514+
serializer = TestSerializer(data={"appointment": appointment})
515+
serializer.is_valid()
516+
renderer = HTMLFormRenderer()
517+
field = serializer['appointment']
518+
rendered = renderer.render_field(field, {})
519+
self.assertInHTML(
520+
'<input name="appointment" class="form-control" type="datetime-local" value="2024-12-24T00:55:30">',
521+
rendered
522+
)
523+
524+
def test_datetime_field_rendering_no_seconds_and_milliseconds(self):
525+
class TestSerializer(serializers.Serializer):
526+
appointment = serializers.DateTimeField()
527+
528+
appointment = datetime(2024, 12, 24, 0, 55, 0, 0)
529+
serializer = TestSerializer(data={"appointment": appointment})
530+
serializer.is_valid()
531+
renderer = HTMLFormRenderer()
532+
field = serializer['appointment']
533+
rendered = renderer.render_field(field, {})
534+
self.assertInHTML(
535+
'<input name="appointment" class="form-control" type="datetime-local" value="2024-12-24T00:55:00">',
536+
rendered
537+
)
538+
508539

509540
class TestHTMLFormRenderer(TestCase):
510541
def setUp(self):

0 commit comments

Comments
 (0)