diff options
| author | Tom Christie | 2013-08-19 21:44:47 +0100 |
|---|---|---|
| committer | Tom Christie | 2013-08-19 21:44:47 +0100 |
| commit | 28ff6fb1ec02b7a04c4a0db54885f3735b6dd43f (patch) | |
| tree | a2172f36b09864d9ba38e331fcd7be64a5e24831 /rest_framework/fields.py | |
| parent | 34d65119fc1c200b76a8af7213a92d6b279bd478 (diff) | |
| download | django-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.py | 14 |
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'): |
