Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 11778)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -714,6 +714,25 @@
         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):
+        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):
     empty_strings_allowed = False
     def __init__(self, *args, **kwargs):
Index: django/db/backends/postgresql/introspection.py
===================================================================
--- django/db/backends/postgresql/introspection.py	(revision 11778)
+++ 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 11778)
+++ 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 11778)
+++ 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 11778)
+++ 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 11778)
+++ 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 11778)
+++ 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/creation.py
===================================================================
--- django/db/backends/oracle/creation.py	(revision 11778)
+++ 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 11778)
+++ django/contrib/admin/options.py	(working copy)
@@ -41,14 +41,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 11778)
+++ 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,30 @@
         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))
Index: tests/regressiontests/model_fields/models.py
===================================================================
--- tests/regressiontests/model_fields/models.py	(revision 11778)
+++ tests/regressiontests/model_fields/models.py	(working copy)
@@ -51,7 +51,12 @@
 class BigS(models.Model):
     s = models.SlugField(max_length=255)
 
+class BigInt(models.Model):
+    value = models.BigIntegerField()
 
+    def __unicode__(self):
+        return unicode(self.value)
+
 ###############################################################################
 # ImageField
 
Index: docs/ref/models/fields.txt
===================================================================
--- docs/ref/models/fields.txt	(revision 11778)
+++ 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``
 ------------------
 
