aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/fields.py
diff options
context:
space:
mode:
authorTom Christie2013-08-19 21:44:47 +0100
committerTom Christie2013-08-19 21:44:47 +0100
commit28ff6fb1ec02b7a04c4a0db54885f3735b6dd43f (patch)
treea2172f36b09864d9ba38e331fcd7be64a5e24831 /rest_framework/fields.py
parent34d65119fc1c200b76a8af7213a92d6b279bd478 (diff)
downloaddjango-rest-framework-28ff6fb1ec02b7a04c4a0db54885f3735b6dd43f.tar.bz2
Only HTML forms should have implicit default False for boolean fields
Diffstat (limited to 'rest_framework/fields.py')
-rw-r--r--rest_framework/fields.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index add9d224..07779c47 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -16,6 +16,7 @@ from django.core import validators
from django.core.exceptions import ValidationError
from django.conf import settings
from django.db.models.fields import BLANK_CHOICE_DASH
+from django.http import QueryDict
from django.forms import widgets
from django.utils.encoding import is_protected_type
from django.utils.translation import ugettext_lazy as _
@@ -399,10 +400,15 @@ class BooleanField(WritableField):
}
empty = False
- # Note: we set default to `False` in order to fill in missing value not
- # supplied by html form. TODO: Fix so that only html form input gets
- # this behavior.
- default = False
+ def field_from_native(self, data, files, field_name, into):
+ # HTML checkboxes do not explicitly represent unchecked as `False`
+ # we deal with that here...
+ if isinstance(data, QueryDict):
+ self.default = False
+
+ return super(BooleanField, self).field_from_native(
+ data, files, field_name, into
+ )
def from_native(self, value):
if value in ('true', 't', 'True', '1'):