Skip to content

Commit 0d354e8

Browse files
committed
to_internal_value() and to_representation()
1 parent adcb64a commit 0d354e8

File tree

5 files changed

+62
-60
lines changed

5 files changed

+62
-60
lines changed

Diff for: rest_framework/fields.py

+44-42
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def get_default(self):
195195
raise SkipField()
196196
return self.default
197197

198-
def validate_value(self, data=empty):
198+
def run_validation(self, data=empty):
199199
"""
200200
Validate a simple representation and return the internal value.
201201
@@ -208,7 +208,7 @@ def validate_value(self, data=empty):
208208
self.fail('required')
209209
return self.get_default()
210210

211-
value = self.to_native(data)
211+
value = self.to_internal_value(data)
212212
self.run_validators(value)
213213
return value
214214

@@ -225,17 +225,17 @@ def run_validators(self, value):
225225
if errors:
226226
raise ValidationError(errors)
227227

228-
def to_native(self, data):
228+
def to_internal_value(self, data):
229229
"""
230230
Transform the *incoming* primative data into a native value.
231231
"""
232-
raise NotImplementedError('to_native() must be implemented.')
232+
raise NotImplementedError('to_internal_value() must be implemented.')
233233

234-
def to_primative(self, value):
234+
def to_representation(self, value):
235235
"""
236236
Transform the *outgoing* native value into primative data.
237237
"""
238-
raise NotImplementedError('to_primative() must be implemented.')
238+
raise NotImplementedError('to_representation() must be implemented.')
239239

240240
def fail(self, key, **kwargs):
241241
"""
@@ -279,14 +279,14 @@ def get_value(self, dictionary):
279279
return dictionary.get(self.field_name, False)
280280
return dictionary.get(self.field_name, empty)
281281

282-
def to_native(self, data):
282+
def to_internal_value(self, data):
283283
if data in self.TRUE_VALUES:
284284
return True
285285
elif data in self.FALSE_VALUES:
286286
return False
287287
self.fail('invalid', input=data)
288288

289-
def to_primative(self, value):
289+
def to_representation(self, value):
290290
if value is None:
291291
return None
292292
if value in self.TRUE_VALUES:
@@ -309,12 +309,14 @@ def __init__(self, **kwargs):
309309
self.min_length = kwargs.pop('min_length', None)
310310
super(CharField, self).__init__(**kwargs)
311311

312-
def to_native(self, data):
312+
def to_internal_value(self, data):
313313
if data == '' and not self.allow_blank:
314314
self.fail('blank')
315+
if data is None:
316+
return None
315317
return str(data)
316318

317-
def to_primative(self, value):
319+
def to_representation(self, value):
318320
if value is None:
319321
return None
320322
return str(value)
@@ -326,17 +328,17 @@ class EmailField(CharField):
326328
}
327329
default_validators = [validators.validate_email]
328330

329-
def to_native(self, data):
330-
ret = super(EmailField, self).to_native(data)
331-
if ret is None:
331+
def to_internal_value(self, data):
332+
if data == '' and not self.allow_blank:
333+
self.fail('blank')
334+
if data is None:
332335
return None
333-
return ret.strip()
336+
return str(data).strip()
334337

335-
def to_primative(self, value):
336-
ret = super(EmailField, self).to_primative(value)
337-
if ret is None:
338+
def to_representation(self, value):
339+
if value is None:
338340
return None
339-
return ret.strip()
341+
return str(value).strip()
340342

341343

342344
class RegexField(CharField):
@@ -378,14 +380,14 @@ def __init__(self, **kwargs):
378380
if min_value is not None:
379381
self.validators.append(validators.MinValueValidator(min_value))
380382

381-
def to_native(self, data):
383+
def to_internal_value(self, data):
382384
try:
383385
data = int(str(data))
384386
except (ValueError, TypeError):
385387
self.fail('invalid')
386388
return data
387389

388-
def to_primative(self, value):
390+
def to_representation(self, value):
389391
if value is None:
390392
return None
391393
return int(value)
@@ -405,19 +407,19 @@ def __init__(self, **kwargs):
405407
if min_value is not None:
406408
self.validators.append(validators.MinValueValidator(min_value))
407409

408-
def to_primative(self, value):
410+
def to_internal_value(self, value):
411+
if value is None:
412+
return None
413+
return float(value)
414+
415+
def to_representation(self, value):
409416
if value is None:
410417
return None
411418
try:
412419
return float(value)
413420
except (TypeError, ValueError):
414421
self.fail('invalid', value=value)
415422

416-
def to_native(self, value):
417-
if value is None:
418-
return None
419-
return float(value)
420-
421423

422424
class DecimalField(Field):
423425
default_error_messages = {
@@ -439,7 +441,7 @@ def __init__(self, max_digits, decimal_places, coerce_to_string=True, max_value=
439441
if min_value is not None:
440442
self.validators.append(validators.MinValueValidator(min_value))
441443

442-
def from_native(self, value):
444+
def to_internal_value(self, value):
443445
"""
444446
Validates that the input is a decimal number. Returns a Decimal
445447
instance. Returns None for empty values. Ensures that there are no more
@@ -485,7 +487,7 @@ def from_native(self, value):
485487

486488
return value
487489

488-
def to_primative(self, value):
490+
def to_representation(self, value):
489491
if isinstance(value, decimal.Decimal):
490492
context = decimal.getcontext().copy()
491493
context.prec = self.max_digits
@@ -516,7 +518,7 @@ def __init__(self, input_formats=None, format=None, *args, **kwargs):
516518
self.format = format if format is not None else self.format
517519
super(DateField, self).__init__(*args, **kwargs)
518520

519-
def from_native(self, value):
521+
def to_internal_value(self, value):
520522
if value in validators.EMPTY_VALUES:
521523
return None
522524

@@ -552,7 +554,7 @@ def from_native(self, value):
552554
msg = self.error_messages['invalid'] % humanized_format
553555
raise ValidationError(msg)
554556

555-
def to_primative(self, value):
557+
def to_representation(self, value):
556558
if value is None or self.format is None:
557559
return value
558560

@@ -576,7 +578,7 @@ def __init__(self, input_formats=None, format=None, *args, **kwargs):
576578
self.format = format if format is not None else self.format
577579
super(DateTimeField, self).__init__(*args, **kwargs)
578580

579-
def from_native(self, value):
581+
def to_internal_value(self, value):
580582
if value in validators.EMPTY_VALUES:
581583
return None
582584

@@ -618,7 +620,7 @@ def from_native(self, value):
618620
msg = self.error_messages['invalid'] % humanized_format
619621
raise ValidationError(msg)
620622

621-
def to_primative(self, value):
623+
def to_representation(self, value):
622624
if value is None or self.format is None:
623625
return value
624626

@@ -670,7 +672,7 @@ def from_native(self, value):
670672
msg = self.error_messages['invalid'] % humanized_format
671673
raise ValidationError(msg)
672674

673-
def to_primative(self, value):
675+
def to_representation(self, value):
674676
if value is None or self.format is None:
675677
return value
676678

@@ -711,13 +713,13 @@ def __init__(self, choices, **kwargs):
711713

712714
super(ChoiceField, self).__init__(**kwargs)
713715

714-
def to_native(self, data):
716+
def to_internal_value(self, data):
715717
try:
716718
return self.choice_strings_to_values[str(data)]
717719
except KeyError:
718720
self.fail('invalid_choice', input=data)
719721

720-
def to_primative(self, value):
722+
def to_representation(self, value):
721723
return value
722724

723725

@@ -727,15 +729,15 @@ class MultipleChoiceField(ChoiceField):
727729
'not_a_list': _('Expected a list of items but got type `{input_type}`')
728730
}
729731

730-
def to_native(self, data):
732+
def to_internal_value(self, data):
731733
if not hasattr(data, '__iter__'):
732734
self.fail('not_a_list', input_type=type(data).__name__)
733735
return set([
734-
super(MultipleChoiceField, self).to_native(item)
736+
super(MultipleChoiceField, self).to_internal_value(item)
735737
for item in data
736738
])
737739

738-
def to_primative(self, value):
740+
def to_representation(self, value):
739741
return value
740742

741743

@@ -768,7 +770,7 @@ def __init__(self, **kwargs):
768770
kwargs['read_only'] = True
769771
super(ReadOnlyField, self).__init__(**kwargs)
770772

771-
def to_primative(self, value):
773+
def to_representation(self, value):
772774
if is_simple_callable(value):
773775
return value()
774776
return value
@@ -795,7 +797,7 @@ def __init__(self, method_attr=None, **kwargs):
795797
kwargs['read_only'] = True
796798
super(SerializerMethodField, self).__init__(**kwargs)
797799

798-
def to_primative(self, value):
800+
def to_representation(self, value):
799801
method_attr = self.method_attr
800802
if method_attr is None:
801803
method_attr = 'get_{field_name}'.format(field_name=self.field_name)
@@ -815,13 +817,13 @@ def __init__(self, model_field, **kwargs):
815817
kwargs['source'] = '*'
816818
super(ModelField, self).__init__(**kwargs)
817819

818-
def to_native(self, data):
820+
def to_internal_value(self, data):
819821
rel = getattr(self.model_field, 'rel', None)
820822
if rel is not None:
821823
return rel.to._meta.get_field(rel.field_name).to_python(data)
822824
return self.model_field.to_python(data)
823825

824-
def to_primative(self, obj):
826+
def to_representation(self, obj):
825827
value = self.model_field._get_val_from_obj(obj)
826828
if is_protected_type(value):
827829
return value

Diff for: rest_framework/pagination.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class NextPageField(serializers.Field):
1313
"""
1414
page_field = 'page'
1515

16-
def to_primative(self, value):
16+
def to_representation(self, value):
1717
if not value.has_next():
1818
return None
1919
page = value.next_page_number()
@@ -28,7 +28,7 @@ class PreviousPageField(serializers.Field):
2828
"""
2929
page_field = 'page'
3030

31-
def to_primative(self, value):
31+
def to_representation(self, value):
3232
if not value.has_previous():
3333
return None
3434
page = value.previous_page_number()

Diff for: rest_framework/relations.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def __init__(self, **kwargs):
110110
def get_attribute(self, instance):
111111
return instance
112112

113-
def to_primative(self, value):
113+
def to_representation(self, value):
114114
request = self.context.get('request', None)
115115
format = self.context.get('format', None)
116116

Diff for: rest_framework/serializers.py

+14-14
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ def __init__(self, instance=None, data=None, **kwargs):
4747
self.instance = instance
4848
self._initial_data = data
4949

50-
def to_native(self, data):
51-
raise NotImplementedError('`to_native()` must be implemented.')
50+
def to_internal_value(self, data):
51+
raise NotImplementedError('`to_internal_value()` must be implemented.')
5252

53-
def to_primative(self, instance):
54-
raise NotImplementedError('`to_primative()` must be implemented.')
53+
def to_representation(self, instance):
54+
raise NotImplementedError('`to_representation()` must be implemented.')
5555

5656
def update(self, instance, attrs):
5757
raise NotImplementedError('`update()` must be implemented.')
@@ -74,7 +74,7 @@ def save(self, extras=None):
7474
def is_valid(self, raise_exception=False):
7575
if not hasattr(self, '_validated_data'):
7676
try:
77-
self._validated_data = self.to_native(self._initial_data)
77+
self._validated_data = self.to_internal_value(self._initial_data)
7878
except ValidationError as exc:
7979
self._validated_data = {}
8080
self._errors = exc.message_dict
@@ -90,7 +90,7 @@ def is_valid(self, raise_exception=False):
9090
def data(self):
9191
if not hasattr(self, '_data'):
9292
if self.instance is not None:
93-
self._data = self.to_primative(self.instance)
93+
self._data = self.to_representation(self.instance)
9494
elif self._initial_data is not None:
9595
self._data = dict([
9696
(field_name, field.get_value(self._initial_data))
@@ -193,7 +193,7 @@ def get_value(self, dictionary):
193193
return html.parse_html_dict(dictionary, prefix=self.field_name)
194194
return dictionary.get(self.field_name, empty)
195195

196-
def to_native(self, data):
196+
def to_internal_value(self, data):
197197
"""
198198
Dict of native values <- Dict of primitive datatypes.
199199
"""
@@ -208,7 +208,7 @@ def to_native(self, data):
208208
validate_method = getattr(self, 'validate_' + field.field_name, None)
209209
primitive_value = field.get_value(data)
210210
try:
211-
validated_value = field.validate_value(primitive_value)
211+
validated_value = field.run_validation(primitive_value)
212212
if validate_method is not None:
213213
validated_value = validate_method(validated_value)
214214
except ValidationError as exc:
@@ -226,7 +226,7 @@ def to_native(self, data):
226226
except ValidationError as exc:
227227
raise ValidationError({'non_field_errors': exc.messages})
228228

229-
def to_primative(self, instance):
229+
def to_representation(self, instance):
230230
"""
231231
Object instance -> Dict of primitive datatypes.
232232
"""
@@ -235,7 +235,7 @@ def to_primative(self, instance):
235235

236236
for field in fields:
237237
native_value = field.get_attribute(instance)
238-
ret[field.field_name] = field.to_primative(native_value)
238+
ret[field.field_name] = field.to_representation(native_value)
239239

240240
return ret
241241

@@ -279,20 +279,20 @@ def get_value(self, dictionary):
279279
return html.parse_html_list(dictionary, prefix=self.field_name)
280280
return dictionary.get(self.field_name, empty)
281281

282-
def to_native(self, data):
282+
def to_internal_value(self, data):
283283
"""
284284
List of dicts of native values <- List of dicts of primitive datatypes.
285285
"""
286286
if html.is_html_input(data):
287287
data = html.parse_html_list(data)
288288

289-
return [self.child.validate(item) for item in data]
289+
return [self.child.run_validation(item) for item in data]
290290

291-
def to_primative(self, data):
291+
def to_representation(self, data):
292292
"""
293293
List of object instances -> List of dicts of primitive datatypes.
294294
"""
295-
return [self.child.to_primative(item) for item in data]
295+
return [self.child.to_representation(item) for item in data]
296296

297297
def create(self, attrs_list):
298298
return [self.child.create(attrs) for attrs in attrs_list]

0 commit comments

Comments
 (0)