diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py
index eb70ad9861..b13fb1e9d5 100644
--- a/django/db/backends/__init__.py
+++ b/django/db/backends/__init__.py
@@ -1262,8 +1262,6 @@ class BaseDatabaseOperations(object):
         Some field types on some backends do not provide data in the correct
         format, this is the hook for coverter functions.
         """
-        if not self.connection.features.has_native_duration_field and internal_type == 'DurationField':
-            return [self.convert_durationfield_value]
         return []
 
     def convert_durationfield_value(self, value, field):
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index e8e6750f1e..6a56603359 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -1614,6 +1614,12 @@ class DurationField(Field):
             return value
         return value.total_seconds() * 1000000
 
+    def get_db_converters(self, connection):
+        converters = []
+        if not connection.features.has_native_duration_field:
+            converters.append(connection.ops.convert_durationfield_value)
+        return converters + super(DurationField, self).get_db_converters(connection)
+
     def value_to_string(self, obj):
         val = self._get_val_from_obj(obj)
         return '' if val is None else duration_string(val)