Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 11526)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -356,9 +356,7 @@
                 _("This value must be an integer."))
 
     def get_db_prep_value(self, value):
-        if value is None:
-            return None
-        return int(value)
+        return self.to_python(value)
 
     def contribute_to_class(self, cls, name):
         assert not cls._meta.has_auto_field, "A model can't have more than one AutoField."
@@ -693,9 +691,7 @@
 class IntegerField(Field):
     empty_strings_allowed = False
     def get_db_prep_value(self, value):
-        if value is None:
-            return None
-        return int(value)
+        return self.to_python(value)
 
     def get_internal_type(self):
         return "IntegerField"
Index: tests/regressiontests/model_fields/tests.py
===================================================================
--- tests/regressiontests/model_fields/tests.py	(revision 11526)
+++ tests/regressiontests/model_fields/tests.py	(working copy)
@@ -25,7 +25,21 @@
             ImageFieldUsingFileTests, \
             TwoImageFieldTests
 
-
+class AutoFieldTests(django.test.TestCase):
+    def test_to_python(self):
+        f = models.AutoField(primary_key=True)
+        self.assertEqual(f.to_python(3), 3)
+        self.assertEqual(f.to_python("3"), 3)
+        self.assertEqual(f.to_python(None), None)
+        self.assertRaises(ValidationError, f.to_python, "abc")
+    
+    def test_get_db_prep_value(self):
+        f = models.AutoField(primary_key=True)
+        self.assertEqual(f.get_db_prep_value(3), 3)
+        self.assertEqual(f.get_db_prep_value("3"), 3)
+        self.assertEqual(f.get_db_prep_value(None), None)
+        self.assertRaises(ValidationError, f.get_db_prep_value, "abc")
+        
 class DecimalFieldTests(django.test.TestCase):
     def test_to_python(self):
         f = models.DecimalField(max_digits=4, decimal_places=2)
@@ -72,6 +86,21 @@
         # This should not crash. That counts as a win for our purposes.
         Foo.objects.filter(d__gte=100000000000)
 
+class IntegerFieldTests(django.test.TestCase):
+    def test_to_python(self):
+        f = models.IntegerField()
+        self.assertEqual(f.to_python(3), 3)
+        self.assertEqual(f.to_python("3"), 3)
+        self.assertEqual(f.to_python(None), None)
+        self.assertRaises(ValidationError, f.to_python, "abc")
+    
+    def test_get_db_prep_value(self):
+        f = models.IntegerField()
+        self.assertEqual(f.get_db_prep_value(3), 3)
+        self.assertEqual(f.get_db_prep_value("3"), 3)
+        self.assertEqual(f.get_db_prep_value(None), None)
+        self.assertRaises(ValidationError, f.get_db_prep_value, "abc")
+
 class ForeignKeyTests(django.test.TestCase):
     def test_callable_default(self):
         """Test the use of a lazy callable for ForeignKey.default"""
