Skip to content

Commit 5468bca

Browse files
committed
Apply changes suggested by peterthomassen
1 parent 85b4d34 commit 5468bca

File tree

2 files changed

+17
-18
lines changed

2 files changed

+17
-18
lines changed

rest_framework/renderers.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -344,25 +344,22 @@ def render_field(self, field, parent_style):
344344

345345
if style.get('input_type') == 'datetime-local':
346346
try:
347-
format = field._field.format
347+
format_ = field._field.format
348348
except AttributeError:
349-
format = api_settings.DATETIME_FORMAT
349+
format_ = api_settings.DATETIME_FORMAT
350350

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
355-
else:
351+
if format_ is not None:
356352
# 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)
353+
# https://www.django-rest-framework.org/api-guide/fields/#datetimefield
354+
field.value = (
355+
datetime.datetime.fromisoformat(field.value.rstrip('Z')) if format_ == ISO_8601
356+
else datetime.datetime.strptime(field.value, format_)
360357
)
361358

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

367364
if 'template' in style:
368365
template_name = style['template']

tests/test_renderers.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ class TestSerializer(serializers.Serializer):
507507
field = serializer['appointment']
508508
rendered = renderer.render_field(field, {})
509509
expected_html = (
510-
f'<input name="appointment" class="form-control" '
510+
'<input name="appointment" class="form-control" '
511511
f'type="datetime-local" value="{expected}">'
512512
)
513513

@@ -518,11 +518,6 @@ def test_datetime_field_rendering_milliseconds(self):
518518
datetime(2024, 12, 24, 0, 55, 30, 345678), "2024-12-24T00:55:30.345"
519519
)
520520

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-
)
525-
526521
def test_datetime_field_rendering_no_seconds_and_no_milliseconds(self):
527522
self._assert_datetime_rendering(
528523
datetime(2024, 12, 24, 0, 55, 0, 0), "2024-12-24T00:55:00.000"
@@ -542,13 +537,20 @@ def test_datetime_field_rendering_with_format(self):
542537
{"format": "%a %d %b %Y, %I:%M%p"}
543538
)
544539

545-
@override_settings(TIME_ZONE='UTC', USE_TZ=True)
540+
@override_settings(TIME_ZONE='UTC')
546541
def test_datetime_field_rendering_utc(self):
547542
self._assert_datetime_rendering(
548543
datetime(2024, 12, 24, 0, 55, 30, 345678),
549544
"2024-12-24T00:55:30.345"
550545
)
551546

547+
@override_settings(TIME_ZONE='Asia/Tokyo') # +09:00
548+
def test_datetime_field_rendering_non_zero_timezone(self):
549+
self._assert_datetime_rendering(
550+
datetime(2024, 12, 24, 0, 55, 30, 345678),
551+
"2024-12-24T00:55:30.345"
552+
)
553+
552554
@override_settings(REST_FRAMEWORK={'DATETIME_FORMAT': '%a %d %b %Y, %I:%M%p'})
553555
def test_datetime_field_rendering_with_custom_datetime_format(self):
554556
self._assert_datetime_rendering(

0 commit comments

Comments
 (0)