Dict of native values <- Dict of primitive datatypes.
(self, data)
| 491 | super().run_validators(to_validate) |
| 492 | |
| 493 | def to_internal_value(self, data): |
| 494 | """ |
| 495 | Dict of native values <- Dict of primitive datatypes. |
| 496 | """ |
| 497 | if not isinstance(data, Mapping): |
| 498 | message = self.error_messages['invalid'].format( |
| 499 | datatype=type(data).__name__ |
| 500 | ) |
| 501 | raise ValidationError({ |
| 502 | api_settings.NON_FIELD_ERRORS_KEY: [message] |
| 503 | }, code='invalid') |
| 504 | |
| 505 | ret = {} |
| 506 | errors = {} |
| 507 | fields = self._writable_fields |
| 508 | |
| 509 | for field in fields: |
| 510 | validate_method = getattr(self, 'validate_' + field.field_name, None) |
| 511 | primitive_value = field.get_value(data) |
| 512 | try: |
| 513 | validated_value = field.run_validation(primitive_value) |
| 514 | if validate_method is not None: |
| 515 | validated_value = validate_method(validated_value) |
| 516 | except ValidationError as exc: |
| 517 | errors[field.field_name] = exc.detail |
| 518 | except DjangoValidationError as exc: |
| 519 | errors[field.field_name] = get_error_detail(exc) |
| 520 | except SkipField: |
| 521 | pass |
| 522 | else: |
| 523 | self.set_value(ret, field.source_attrs, validated_value) |
| 524 | |
| 525 | if errors: |
| 526 | raise ValidationError(errors) |
| 527 | |
| 528 | return ret |
| 529 | |
| 530 | def to_representation(self, instance): |
| 531 | """ |
no test coverage detected