Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 16406)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -6,7 +6,7 @@
 import math
 from itertools import tee
 
-from django.db import connection
+from django.db import connection, utils
 from django.db.models.query_utils import QueryWrapper
 from django.conf import settings
 from django import forms
@@ -848,9 +848,16 @@
     empty_strings_allowed = False
     default_error_messages = {
         'invalid': _("This value must be a float."),
+        'no-infinity': _("This field has no infinity enabled"),
     }
     description = _("Floating point number")
 
+    def __init__(self, allow_infinity=False, *args, **kwargs):
+        if allow_infinity and not(connection.features.supports_infinity_floats):
+            raise utils.DatabaseError("Your database does not support storing infinity values.")
+        self.allow_infinity = allow_infinity
+        super(FloatField, self).__init__(*args, **kwargs)
+
     def get_prep_value(self, value):
         if value is None:
             return None
@@ -863,9 +870,13 @@
         if value is None:
             return value
         try:
-            return float(value)
+            float_value = float(value)
         except (TypeError, ValueError):
             raise exceptions.ValidationError(self.error_messages['invalid'])
+        if not(self.allow_infinity) and float_value in (float('inf'), float('-inf')):
+            raise exceptions.ValidationError(self.error_messages['no-infinity'])
+        else:
+            return float_value
 
     def formfield(self, **kwargs):
         defaults = {'form_class': forms.FloatField}
Index: django/db/backends/sqlite3/base.py
===================================================================
--- django/db/backends/sqlite3/base.py	(revision 16406)
+++ django/db/backends/sqlite3/base.py	(working copy)
@@ -57,6 +57,7 @@
     supports_unspecified_pk = True
     supports_1000_query_parameters = False
     supports_mixed_date_datetime_comparisons = False
+    supports_infinity_floats = True
 
     def _supports_stddev(self):
         """Confirm support for STDDEV and related stats functions
Index: django/db/backends/__init__.py
===================================================================
--- django/db/backends/__init__.py	(revision 16406)
+++ django/db/backends/__init__.py	(working copy)
@@ -335,6 +335,9 @@
     # date_interval_sql can properly handle mixed Date/DateTime fields and timedeltas
     supports_mixed_date_datetime_comparisons = True
 
+    # Can an float store infinity?
+    supports_infinity_floats = False
+
     # Features that need to be confirmed at runtime
     # Cache whether the confirmation has been performed.
     _confirmed = False
Index: django/forms/fields.py
===================================================================
--- django/forms/fields.py	(revision 16406)
+++ django/forms/fields.py	(working copy)
@@ -235,6 +235,10 @@
         'invalid': _(u'Enter a number.'),
     }
 
+    def __init__(self, store_infinity=False, *args, **kwargs):
+        self.store_infinity = store_infinity
+        super(IntegerField, self).__init__(*args, **kwargs)
+
     def to_python(self, value):
         """
         Validates that float() can be called on the input. Returns the result
