 django/forms/widgets.py | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index fe7c06f..64317e5 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -248,9 +248,22 @@ class Input(Widget):
     """
     input_type = None # Subclasses must define this.
 
+    dt_formats = {
+        datetime.date: 'DATE_INPUT_FORMATS',
+        datetime.datetime: 'DATETIME_INPUT_FORMATS',
+        datetime.time: 'TIME_INPUT_FORMATS',
+    }
+
     def _format_value(self, value):
         if self.is_localized:
             return formats.localize_input(value)
+        elif hasattr(value, 'strftime'):
+            format = formats.get_format(self.dt_formats[type(value)])[0]
+            if type(value) is datetime.date:
+                value = datetime_safe.new_date(value)
+            if type(value) is datetime.datetime:
+                value = datetime_safe.new_datetime(value)
+            return value.strftime(format)
         return value
 
     def render(self, name, value, attrs=None):
