Skip to content

Commit 2bad745

Browse files
committed
Apply changes suggested by peterthomassen
1 parent a15dfb4 commit 2bad745

File tree

2 files changed

+35
-81
lines changed

2 files changed

+35
-81
lines changed

rest_framework/renderers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,10 +343,10 @@ def render_field(self, field, parent_style):
343343
field = field.as_form_field()
344344

345345
if style.get('input_type') == 'datetime-local':
346-
has_format = hasattr(field._field, "format")
347-
348-
if has_format:
346+
if hasattr(field._field, "format"):
349347
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
350350
datetime_field_value = field.value
351351
else:
352352
datetime_field_value = datetime.datetime.strptime(field.value, field._field.format)

tests/test_renderers.py

Lines changed: 32 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -495,111 +495,65 @@ class TestDateTimeFieldHTMLFormRender(TestCase):
495495
Default TIME_ZONE is 'America/Chicago'.
496496
"""
497497

498-
def test_datetime_field_rendering_milliseconds(self):
498+
def _assert_datetime_rendering(self, appointment, expected, datetimefield_kwargs=None):
499+
datetimefield_kwargs = datetimefield_kwargs or {}
500+
499501
class TestSerializer(serializers.Serializer):
500-
appointment = serializers.DateTimeField()
502+
appointment = serializers.DateTimeField(**datetimefield_kwargs)
501503

502-
appointment = datetime(2024, 12, 24, 0, 55, 30, 345678)
503504
serializer = TestSerializer(data={"appointment": appointment})
504505
serializer.is_valid()
505506
renderer = HTMLFormRenderer()
506507
field = serializer['appointment']
507508
rendered = renderer.render_field(field, {})
508-
self.assertInHTML(
509-
'<input name="appointment" class="form-control" type="datetime-local" value="2024-12-24T00:55:30.345">',
510-
rendered
509+
expected_html = (
510+
f'<input name="appointment" class="form-control" '
511+
f'type="datetime-local" value="{expected}">'
511512
)
512513

513-
def test_datetime_field_rendering_no_milliseconds(self):
514-
class TestSerializer(serializers.Serializer):
515-
appointment = serializers.DateTimeField()
514+
self.assertInHTML(expected_html, rendered)
516515

517-
appointment = datetime(2024, 12, 24, 0, 55, 30, 0)
518-
serializer = TestSerializer(data={"appointment": appointment})
519-
serializer.is_valid()
520-
renderer = HTMLFormRenderer()
521-
field = serializer['appointment']
522-
rendered = renderer.render_field(field, {})
523-
self.assertInHTML(
524-
'<input name="appointment" class="form-control" type="datetime-local" value="2024-12-24T00:55:30.000">',
525-
rendered
516+
def test_datetime_field_rendering_milliseconds(self):
517+
self._assert_datetime_rendering(
518+
datetime(2024, 12, 24, 0, 55, 30, 345678), "2024-12-24T00:55:30.345"
526519
)
527520

528-
def test_datetime_field_rendering_no_seconds_and_no_milliseconds(self):
529-
class TestSerializer(serializers.Serializer):
530-
appointment = serializers.DateTimeField()
521+
def test_datetime_field_rendering_no_milliseconds(self):
522+
self._assert_datetime_rendering(
523+
datetime(2024, 12, 24, 0, 55, 30, 0), "2024-12-24T00:55:30.000"
524+
)
531525

532-
appointment = datetime(2024, 12, 24, 0, 55, 0, 0)
533-
serializer = TestSerializer(data={"appointment": appointment})
534-
serializer.is_valid()
535-
renderer = HTMLFormRenderer()
536-
field = serializer['appointment']
537-
rendered = renderer.render_field(field, {})
538-
self.assertInHTML(
539-
'<input name="appointment" class="form-control" type="datetime-local" value="2024-12-24T00:55:00.000">',
540-
rendered
526+
def test_datetime_field_rendering_no_seconds_and_no_milliseconds(self):
527+
self._assert_datetime_rendering(
528+
datetime(2024, 12, 24, 0, 55, 0, 0), "2024-12-24T00:55:00.000"
541529
)
542530

543531
def test_datetime_field_rendering_with_format_as_none(self):
544-
class TestSerializer(serializers.Serializer):
545-
appointment = serializers.DateTimeField(format=None)
546-
547-
appointment = datetime(2024, 12, 24, 0, 55, 30, 345678)
548-
serializer = TestSerializer(data={"appointment": appointment})
549-
serializer.is_valid()
550-
renderer = HTMLFormRenderer()
551-
field = serializer['appointment']
552-
rendered = renderer.render_field(field, {})
553-
self.assertInHTML(
554-
'<input name="appointment" class="form-control" type="datetime-local" value="2024-12-24T00:55:30.345">',
555-
rendered
532+
self._assert_datetime_rendering(
533+
datetime(2024, 12, 24, 0, 55, 30, 345678),
534+
"2024-12-24T00:55:30.345",
535+
{"format": None}
556536
)
557537

558538
def test_datetime_field_rendering_with_format(self):
559-
class TestSerializer(serializers.Serializer):
560-
appointment = serializers.DateTimeField(format='%a %d %b %Y, %I:%M%p')
561-
562-
appointment = datetime(2024, 12, 24, 0, 55, 30, 345678)
563-
serializer = TestSerializer(data={"appointment": appointment})
564-
serializer.is_valid()
565-
renderer = HTMLFormRenderer()
566-
field = serializer['appointment']
567-
rendered = renderer.render_field(field, {})
568-
self.assertInHTML(
569-
'<input name="appointment" class="form-control" type="datetime-local" value="2024-12-24T00:55:00.000">',
570-
rendered
539+
self._assert_datetime_rendering(
540+
datetime(2024, 12, 24, 0, 55, 30, 345678),
541+
"2024-12-24T00:55:00.000",
542+
{"format": "%a %d %b %Y, %I:%M%p"}
571543
)
572544

573545
@override_settings(TIME_ZONE='UTC', USE_TZ=True)
574546
def test_datetime_field_rendering_utc(self):
575-
class TestSerializer(serializers.Serializer):
576-
appointment = serializers.DateTimeField()
577-
578-
appointment = datetime(2024, 12, 24, 0, 55, 30, 345678)
579-
serializer = TestSerializer(data={"appointment": appointment})
580-
serializer.is_valid()
581-
renderer = HTMLFormRenderer()
582-
field = serializer['appointment']
583-
rendered = renderer.render_field(field, {})
584-
self.assertInHTML(
585-
'<input name="appointment" class="form-control" type="datetime-local" value="2024-12-24T00:55:30.345">',
586-
rendered
547+
self._assert_datetime_rendering(
548+
datetime(2024, 12, 24, 0, 55, 30, 345678),
549+
"2024-12-24T00:55:30.345"
587550
)
588551

589552
@override_settings(REST_FRAMEWORK={'DATETIME_FORMAT': '%a %d %b %Y, %I:%M%p'})
590553
def test_datetime_field_rendering_with_custom_datetime_format(self):
591-
class TestSerializer(serializers.Serializer):
592-
appointment = serializers.DateTimeField()
593-
594-
appointment = datetime(2024, 12, 24, 0, 55, 30, 345678)
595-
serializer = TestSerializer(data={"appointment": appointment})
596-
serializer.is_valid()
597-
renderer = HTMLFormRenderer()
598-
field = serializer['appointment']
599-
rendered = renderer.render_field(field, {})
600-
self.assertInHTML(
601-
'<input name="appointment" class="form-control" type="datetime-local" value="2024-12-24T00:55:00.000">',
602-
rendered
554+
self._assert_datetime_rendering(
555+
datetime(2024, 12, 24, 0, 55, 30, 345678),
556+
"2024-12-24T00:55:00.000"
603557
)
604558

605559

0 commit comments

Comments
 (0)