aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/fields.py
diff options
context:
space:
mode:
authorTom Christie2014-09-22 17:46:02 +0100
committerTom Christie2014-09-22 17:46:02 +0100
commit5d80f7f932bfcc0630ac0fdbf07072a53197b98f (patch)
tree1da23b1314ddd3d22dab5721148765284716bff7 /rest_framework/fields.py
parent5a95baf2a2258fb5297062ac18582129c05fb320 (diff)
downloaddjango-rest-framework-5d80f7f932bfcc0630ac0fdbf07072a53197b98f.tar.bz2
allow_blank, allow_null
Diffstat (limited to 'rest_framework/fields.py')
-rw-r--r--rest_framework/fields.py40
1 files changed, 16 insertions, 24 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index 80eadf1e..48a3e1ab 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -98,14 +98,15 @@ class Field(object):
_creation_counter = 0
default_error_messages = {
- 'required': _('This field is required.')
+ 'required': _('This field is required.'),
+ 'null': _('This field may not be null.')
}
default_validators = []
def __init__(self, read_only=False, write_only=False,
required=None, default=empty, initial=None, source=None,
label=None, help_text=None, style=None,
- error_messages=None, validators=[]):
+ error_messages=None, validators=[], allow_null=False):
self._creation_counter = Field._creation_counter
Field._creation_counter += 1
@@ -129,6 +130,7 @@ class Field(object):
self.help_text = help_text
self.style = {} if style is None else style
self.validators = validators or self.default_validators[:]
+ self.allow_null = allow_null
# Collect default error message from self and parent classes
messages = {}
@@ -220,6 +222,11 @@ class Field(object):
self.fail('required')
return self.get_default()
+ if data is None:
+ if not self.allow_null:
+ self.fail('null')
+ return None
+
value = self.to_internal_value(data)
self.run_validators(value)
return value
@@ -315,11 +322,14 @@ class CharField(Field):
self.min_length = kwargs.pop('min_length', None)
super(CharField, self).__init__(**kwargs)
+ def run_validation(self, data=empty):
+ if data == '':
+ if not self.allow_blank:
+ self.fail('blank')
+ return ''
+ return super(CharField, self).run_validation(data)
+
def to_internal_value(self, data):
- if data == '' and not self.allow_blank:
- self.fail('blank')
- if data is None:
- return None
return str(data)
def to_representation(self, value):
@@ -339,10 +349,6 @@ class EmailField(CharField):
self.validators.append(validator)
def to_internal_value(self, data):
- if data == '' and not self.allow_blank:
- self.fail('blank')
- if data is None:
- return None
return str(data).strip()
def to_representation(self, value):
@@ -437,8 +443,6 @@ class FloatField(Field):
self.validators.append(MinValueValidator(min_value, message=message))
def to_internal_value(self, value):
- if value is None:
- return None
try:
return float(value)
except (TypeError, ValueError):
@@ -481,9 +485,6 @@ class DecimalField(Field):
than max_digits in the number, and no more than decimal_places digits
after the decimal point.
"""
- if value in (None, ''):
- return None
-
value = smart_text(value).strip()
try:
value = decimal.Decimal(value)
@@ -554,9 +555,6 @@ class DateField(Field):
super(DateField, self).__init__(*args, **kwargs)
def to_internal_value(self, value):
- if value in (None, ''):
- return None
-
if isinstance(value, datetime.datetime):
self.fail('datetime')
@@ -622,9 +620,6 @@ class DateTimeField(Field):
return value
def to_internal_value(self, value):
- if value in (None, ''):
- return None
-
if isinstance(value, datetime.date) and not isinstance(value, datetime.datetime):
self.fail('date')
@@ -676,9 +671,6 @@ class TimeField(Field):
super(TimeField, self).__init__(*args, **kwargs)
def to_internal_value(self, value):
- if value in (None, ''):
- return None
-
if isinstance(value, datetime.time):
return value