diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 9037265..e6b5400 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -768,6 +768,12 @@ class DecimalField(Field):
             return decimal.Decimal(value)
         except decimal.InvalidOperation:
             raise exceptions.ValidationError(self.error_messages['invalid'])
+        except TypeError:
+            # Decimal(value) doesn't work when value is a Decimal object after
+            # the decimal module has been reloaded.
+            if hasattr(value, 'as_tuple'):
+                return decimal.Decimal(value.as_tuple())
+            raise
 
     def _format(self, value):
         if isinstance(value, basestring) or value is None:
diff --git a/tests/regressiontests/model_fields/tests.py b/tests/regressiontests/model_fields/tests.py
index b42c0af..8bc51dd 100644
--- a/tests/regressiontests/model_fields/tests.py
+++ b/tests/regressiontests/model_fields/tests.py
@@ -64,6 +64,19 @@ class DecimalFieldTests(test.TestCase):
         self.assertEqual(f.to_python("3.14"), Decimal("3.14"))
         self.assertRaises(ValidationError, f.to_python, "abc")
 
+    def test_to_python_reload(self):
+        """ Cehcks that a decimal value can still be used after the 
+            module has been reloaded. See ticket #10933.
+        """
+        import decimal
+        f = models.DecimalField(max_digits=4, decimal_places=2)
+        val = decimal.Decimal(0)
+        reload(decimal)
+        try:
+            self.assertEqual(f.to_python(val), Decimal("0"))
+        except TypeError:
+            self.fail("TypeError raised after reloading decimal module.")
+
     def test_default(self):
         f = models.DecimalField(default=Decimal("0.00"))
         self.assertEqual(f.get_default(), Decimal("0.00"))
