Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 11868)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -743,6 +743,26 @@
         defaults.update(kwargs)
         return super(IntegerField, self).formfield(**defaults)
 
+class BigIntegerField(IntegerField):
+    MAX_BIGINT = 9223372036854775807
+    empty_strings_allowed = False
+    def get_internal_type(self):
+        return "BigIntegerField"
+
+    def get_db_prep_save(self, value):
+        if value is not None:
+            value = long(value)
+            if value > BigIntegerField.MAX_BIGINT or value < -BigIntegerField.MAX_BIGINT - 1:
+                raise ValueError("Value is to small/large to fit this field")
+        return super(BigIntegerField, self).get_db_prep_save(value)
+
+    def formfield(self, **kwargs):
+        defaults = {'min_value': -BigIntegerField.MAX_BIGINT - 1,
+                    'max_value': BigIntegerField.MAX_BIGINT}
+        defaults.update(kwargs)
+        return super(BigIntegerField, self).formfield(**defaults)
+
+
 class IPAddressField(Field):
     """IP address"""
     
Index: django/db/backends/postgresql/introspection.py
===================================================================
--- django/db/backends/postgresql/introspection.py	(revision 11868)
+++ django/db/backends/postgresql/introspection.py	(working copy)
@@ -4,6 +4,7 @@
     # Maps type codes to Django Field types.
     data_types_reverse = {
         16: 'BooleanField',
+        20: 'BigIntegerField',
         21: 'SmallIntegerField',
         23: 'IntegerField',
         25: 'TextField',
Index: django/db/backends/postgresql/creation.py
===================================================================
--- django/db/backends/postgresql/creation.py	(revision 11868)
+++ django/db/backends/postgresql/creation.py	(working copy)
@@ -18,6 +18,7 @@
         'FilePathField':     'varchar(%(max_length)s)',
         'FloatField':        'double precision',
         'IntegerField':      'integer',
+        'BigIntegerField':   'bigint',
         'IPAddressField':    'inet',
         'NullBooleanField':  'boolean',
         'OneToOneField':     'integer',
Index: django/db/backends/sqlite3/introspection.py
===================================================================
--- django/db/backends/sqlite3/introspection.py	(revision 11868)
+++ django/db/backends/sqlite3/introspection.py	(working copy)
@@ -16,6 +16,7 @@
         'smallinteger': 'SmallIntegerField',
         'int': 'IntegerField',
         'integer': 'IntegerField',
+        'bigint': 'BigIntegerField',
         'integer unsigned': 'PositiveIntegerField',
         'decimal': 'DecimalField',
         'real': 'FloatField',
Index: django/db/backends/sqlite3/creation.py
===================================================================
--- django/db/backends/sqlite3/creation.py	(revision 11868)
+++ django/db/backends/sqlite3/creation.py	(working copy)
@@ -19,6 +19,7 @@
         'FilePathField':                'varchar(%(max_length)s)',
         'FloatField':                   'real',
         'IntegerField':                 'integer',
+        'BigIntegerField':                 'bigint',
         'IPAddressField':               'char(15)',
         'NullBooleanField':             'bool',
         'OneToOneField':                'integer',
Index: django/db/backends/mysql/introspection.py
===================================================================
--- django/db/backends/mysql/introspection.py	(revision 11868)
+++ django/db/backends/mysql/introspection.py	(working copy)
@@ -17,7 +17,7 @@
         FIELD_TYPE.FLOAT: 'FloatField',
         FIELD_TYPE.INT24: 'IntegerField',
         FIELD_TYPE.LONG: 'IntegerField',
-        FIELD_TYPE.LONGLONG: 'IntegerField',
+        FIELD_TYPE.LONGLONG: 'BigIntegerField',
         FIELD_TYPE.SHORT: 'IntegerField',
         FIELD_TYPE.STRING: 'CharField',
         FIELD_TYPE.TIMESTAMP: 'DateTimeField',
Index: django/db/backends/mysql/creation.py
===================================================================
--- django/db/backends/mysql/creation.py	(revision 11868)
+++ django/db/backends/mysql/creation.py	(working copy)
@@ -18,6 +18,7 @@
         'FilePathField':     'varchar(%(max_length)s)',
         'FloatField':        'double precision',
         'IntegerField':      'integer',
+        'BigIntegerField':   'bigint',
         'IPAddressField':    'char(15)',
         'NullBooleanField':  'bool',
         'OneToOneField':     'integer',
@@ -63,4 +64,4 @@
                 field.rel.to._meta.db_table, field.rel.to._meta.pk.column)
             ]
         return table_output, deferred
-        
\ No newline at end of file
+        
Index: django/db/backends/oracle/introspection.py
===================================================================
--- django/db/backends/oracle/introspection.py	(revision 11868)
+++ django/db/backends/oracle/introspection.py	(working copy)
@@ -29,7 +29,10 @@
     def get_field_type(self, data_type, description):
         # If it's a NUMBER with scale == 0, consider it an IntegerField
         if data_type == cx_Oracle.NUMBER and description[5] == 0:
-            return 'IntegerField'
+            if description[4] > 11:
+                return 'BigIntegerField'
+            else:
+                return 'IntegerField'
         else:
             return super(DatabaseIntrospection, self).get_field_type(
                 data_type, description)
Index: django/db/backends/oracle/creation.py
===================================================================
--- django/db/backends/oracle/creation.py	(revision 11868)
+++ django/db/backends/oracle/creation.py	(working copy)
@@ -27,6 +27,7 @@
         'FilePathField':                'NVARCHAR2(%(max_length)s)',
         'FloatField':                   'DOUBLE PRECISION',
         'IntegerField':                 'NUMBER(11)',
+        'BigIntegerField':              'NUMBER(19)',
         'IPAddressField':               'VARCHAR2(15)',
         'NullBooleanField':             'NUMBER(1) CHECK ((%(qn_column)s IN (0,1)) OR (%(qn_column)s IS NULL))',
         'OneToOneField':                'NUMBER(11)',
Index: django/contrib/admin/options.py
===================================================================
--- django/contrib/admin/options.py	(revision 11868)
+++ django/contrib/admin/options.py	(working copy)
@@ -42,14 +42,15 @@
         'form_class': forms.SplitDateTimeField,
         'widget': widgets.AdminSplitDateTime
     },
-    models.DateField:    {'widget': widgets.AdminDateWidget},
-    models.TimeField:    {'widget': widgets.AdminTimeWidget},
-    models.TextField:    {'widget': widgets.AdminTextareaWidget},
-    models.URLField:     {'widget': widgets.AdminURLFieldWidget},
-    models.IntegerField: {'widget': widgets.AdminIntegerFieldWidget},
-    models.CharField:    {'widget': widgets.AdminTextInputWidget},
-    models.ImageField:   {'widget': widgets.AdminFileWidget},
-    models.FileField:    {'widget': widgets.AdminFileWidget},
+    models.DateField:       {'widget': widgets.AdminDateWidget},
+    models.TimeField:       {'widget': widgets.AdminTimeWidget},
+    models.TextField:       {'widget': widgets.AdminTextareaWidget},
+    models.URLField:        {'widget': widgets.AdminURLFieldWidget},
+    models.IntegerField:    {'widget': widgets.AdminIntegerFieldWidget},
+    models.BigIntegerField: {'widget': widgets.AdminIntegerFieldWidget},
+    models.CharField:       {'widget': widgets.AdminTextInputWidget},
+    models.ImageField:      {'widget': widgets.AdminFileWidget},
+    models.FileField:       {'widget': widgets.AdminFileWidget},
 }
 
 
Index: tests/regressiontests/model_fields/tests.py
===================================================================
--- tests/regressiontests/model_fields/tests.py	(revision 11868)
+++ tests/regressiontests/model_fields/tests.py	(working copy)
@@ -6,7 +6,7 @@
 from django.db import models
 from django.core.exceptions import ValidationError
 
-from models import Foo, Bar, Whiz, BigD, BigS, Image
+from models import Foo, Bar, Whiz, BigD, BigS, Image, BigInt
 
 try:
     from decimal import Decimal
@@ -144,3 +144,44 @@
         bs = BigS.objects.create(s = 'slug'*50)
         bs = BigS.objects.get(pk=bs.pk)
         self.assertEqual(bs.s, 'slug'*50)
+
+class BigIntegerFieldTests(django.test.TestCase):
+    def test_existence(self):
+        self.assertEqual(len(BigInt.objects.all()), 0)
+
+    def test_limits(self):
+        self.assertRaises(ValueError, BigInt(value = 9223372036854775809111111111111111111).save)
+        self.assertRaises(ValueError, BigInt(value = -9223372036854775809111111111111111111).save)
+        self.assertRaises(ValueError, BigInt(value = 9223372036854775808).save)
+        self.assertRaises(ValueError, BigInt(value = -9223372036854775809).save)
+        self.assertEqual(BigInt(value = -9223372036854775808).save(), None)
+        self.assertEqual(BigInt(value = 9223372036854775807).save(), None)
+        self.assertEqual(BigInt(value = 0).save(), None)
+
+    def test_types(self):
+        b = BigInt(value = 0)
+        self.assertTrue(isinstance(b.value, (int, long)))
+        b.save()
+        self.assertTrue(isinstance(b.value, (int, long)))
+        b = BigInt.objects.all()[0]
+        self.assertTrue(isinstance(b.value, (int, long)))
+
+    def test_coercing(self):
+        b = BigInt(value = 10)
+        b.save()
+        self.assertEqual(b.value, 10)
+        self.assertEqual(unicode(b), unicode(10))
+
+    def test_null(self):
+        # this test needs to be run in one transaction, so null tests need to
+        # be split
+        try:
+            # it raises different exceptions depending on backend
+            BigInt(value = None).save()
+            self.assertTrue(False, 'null saved in not null field')
+        except:
+            pass
+
+    def test_null2(self):
+        BigInt(value = 1, null_value = 4).save()
+        BigInt(value = 1, null_value = None).save()
Index: tests/regressiontests/model_fields/models.py
===================================================================
--- tests/regressiontests/model_fields/models.py	(revision 11868)
+++ tests/regressiontests/model_fields/models.py	(working copy)
@@ -51,7 +51,13 @@
 class BigS(models.Model):
     s = models.SlugField(max_length=255)
 
+class BigInt(models.Model):
+    value = models.BigIntegerField()
+    null_value = models.BigIntegerField(null = True, blank = True)
 
+    def __unicode__(self):
+        return unicode(self.value)
+
 ###############################################################################
 # ImageField
 
Index: tests/regressiontests/introspection/tests.py
===================================================================
--- tests/regressiontests/introspection/tests.py	(revision 11868)
+++ tests/regressiontests/introspection/tests.py	(working copy)
@@ -77,7 +77,7 @@
         cursor = connection.cursor()
         desc = connection.introspection.get_table_description(cursor, Reporter._meta.db_table)
         self.assertEqual([datatype(r[1], r) for r in desc],
-                          ['IntegerField', 'CharField', 'CharField', 'CharField'])
+                          ['IntegerField', 'CharField', 'CharField', 'CharField', 'BigIntegerField'])
 
     # Regression test for #9991 - 'real' types in postgres
     if settings.DATABASE_ENGINE.startswith('postgresql'):
Index: tests/regressiontests/introspection/models.py
===================================================================
--- tests/regressiontests/introspection/models.py	(revision 11868)
+++ tests/regressiontests/introspection/models.py	(working copy)
@@ -4,6 +4,7 @@
     first_name = models.CharField(max_length=30)
     last_name = models.CharField(max_length=30)
     email = models.EmailField()
+    facebook_user_id = models.BigIntegerField()
 
     def __unicode__(self):
         return u"%s %s" % (self.first_name, self.last_name)
@@ -17,4 +18,4 @@
         return self.headline
 
     class Meta:
-        ordering = ('headline',)
\ No newline at end of file
+        ordering = ('headline',)
Index: docs/ref/models/fields.txt
===================================================================
--- docs/ref/models/fields.txt	(revision 11868)
+++ docs/ref/models/fields.txt	(working copy)
@@ -641,6 +641,18 @@
 An integer. The admin represents this as an ``<input type="text">`` (a
 single-line input).
 
+``bigintegerfield``
+~~~~~~~~~~~~~~~~
+
+.. class:: BigIntegerField([**options])
+
+A big integer. The admin represents this as an ``<input type="text">``
+(a single-line input).
+
+a 64 bit type like an ``integerfield``, except that it fits numbers from
+-9223372036854775808 to 9223372036854775807
+ 
+
 ``IPAddressField``
 ------------------
 

