@@ -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
0 commit comments