Index: trunk/django/forms/fields.py
===================================================================
--- trunk/django/forms/fields.py	(revision 8522)
+++ trunk/django/forms/fields.py	(working copy)
@@ -577,7 +577,7 @@
         # Explicitly check for the string 'False', which is what a hidden field
         # will submit for False. Because bool("True") == True, we don't need to
         # handle that explicitly.
-        if value == 'False':
+        if isinstance(value,str) and value.lower() in ('f', 'false', '0','no'):
             value = False
         else:
             value = bool(value)
Index: trunk/tests/regressiontests/forms/fields.py
===================================================================
--- trunk/tests/regressiontests/forms/fields.py	(revision 8522)
+++ trunk/tests/regressiontests/forms/fields.py	(working copy)
@@ -1011,6 +1011,20 @@
 False
 >>> f.clean('Django rocks')
 True
+>>> f.clean('f')
+False
+>>> f.clean('falSe')
+False
+>>> f.clean('FALSE')
+False
+>>> f.clean('0')
+False
+>>> f.clean('f')
+False
+>>> f.clean('no')
+False
+>>> f.clean('No')
+False
 
 A form's BooleanField with a hidden widget will output the string 'False', so
 that should clean to the boolean value False:
