diff options
| author | Philip Douglas | 2013-09-10 13:09:25 +0100 |
|---|---|---|
| committer | Philip Douglas | 2013-09-10 13:09:25 +0100 |
| commit | 39e13a0d1341c0a0e694acb1522a99470c4037be (patch) | |
| tree | 27b498f3cbf81faa1ff587d0730e07706c7551a8 /rest_framework/fields.py | |
| parent | ef7ce344865938bea285a408a7cc415a7b90a83c (diff) | |
| parent | f5c34926d6a4b4b29fb083d25b99b10d7431eee4 (diff) | |
| download | django-rest-framework-39e13a0d1341c0a0e694acb1522a99470c4037be.tar.bz2 | |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'rest_framework/fields.py')
| -rw-r--r-- | rest_framework/fields.py | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py index add9d224..210c2537 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 _ @@ -307,7 +308,10 @@ class WritableField(Field): try: if self.use_files: files = files or {} - native = files[field_name] + try: + native = files[field_name] + except KeyError: + native = data[field_name] else: native = data[field_name] except KeyError: @@ -399,10 +403,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'): @@ -505,6 +514,11 @@ class ChoiceField(WritableField): return True return False + def from_native(self, value): + if value in validators.EMPTY_VALUES: + return None + return super(ChoiceField, self).from_native(value) + class EmailField(CharField): type_name = 'EmailField' |
