                      attrs = validate_method(attrs, source)
              except ValidationError as err:
                  self._errors[field_name] = self._errors.get(field_name, []) + list(err.messages)
  
          try:
              attrs = self.validate(attrs)
          except ValidationError as err:
              self._errors['non_field_errors'] = err.messages
  
          return attrs
  
      def validate(self, attrs):
          """
 
</s> remove     def from_native(self, data, files):
        restored_object = super(ModelSerializer, self).from_native(data, files)

        if restored_object is None:
            return

 </s> add     def validate(self, attrs):
        copied_attrs = copy.deepcopy(attrs)
        restored_object = self.restore_object(copied_attrs, instance=getattr(self, 'object', None)) </s> remove         try:
            # Call Django's full_clean() which in turn calls: Model.clean_fields(), Model.clean(), Model.validat_unique()
            restored_object.full_clean(exclude=list(self.opts.exclude))
        except ValidationError as e:
            for field_name, error_messages in e.message_dict.items():
                self._errors[field_name] = self._errors.get(field_name, []) + list(error_messages)
 </s> add         # Call Django's full_clean() which in turn calls: Model.clean_fields(), Model.clean(), Model.validat_unique()
        restored_object.full_clean(exclude=list(self.opts.exclude)) </s> remove         return restored_object
 </s> add         return attrs
        # We don't run .validate() because field-validation failed and thus `attrs` may not be complete.
        # which in turn can cause inconsistent validation errors.
        if not self._errors:
            try:
                attrs = self.validate(attrs)
            except ValidationError as err:
                if hasattr(err, 'message_dict'):
                    for field_name, error_messages in err.message_dict.items():
                        self._errors[field_name] = self._errors.get(field_name, []) + list(error_messages)
                elif hasattr(err, 'messages'):
                    self._errors['non_field_errors'] = err.messages
                      attrs = validate_method(attrs, source)
              except ValidationError as err:
                  self._errors[field_name] = self._errors.get(field_name, []) + list(err.messages)
  
        # We don't run .validate() because field-validation failed and thus `attrs` may not be complete.
        # which in turn can cause inconsistent validation errors.
        if not self._errors:
            try:
                attrs = self.validate(attrs)
            except ValidationError as err:
                if hasattr(err, 'message_dict'):
                    for field_name, error_messages in err.message_dict.items():
                        self._errors[field_name] = self._errors.get(field_name, []) + list(error_messages)
                elif hasattr(err, 'messages'):
                    self._errors['non_field_errors'] = err.messages
        # We don't run .validate() because field-validation failed and thus `attrs` may not be complete.
        # which in turn can cause inconsistent validation errors.
        if not self._errors:
            try:
                attrs = self.validate(attrs)
            except ValidationError as err:
                if hasattr(err, 'message_dict'):
                    for field_name, error_messages in err.message_dict.items():
                        self._errors[field_name] = self._errors.get(field_name, []) + list(error_messages)
                elif hasattr(err, 'messages'):
                    self._errors['non_field_errors'] = err.messages
        # We don't run .validate() because field-validation failed and thus `attrs` may not be complete.
        # which in turn can cause inconsistent validation errors.
        if not self._errors:
            try:
                attrs = self.validate(attrs)
            except ValidationError as err:
                if hasattr(err, 'message_dict'):
                    for field_name, error_messages in err.message_dict.items():
                        self._errors[field_name] = self._errors.get(field_name, []) + list(error_messages)
                elif hasattr(err, 'messages'):
                    self._errors['non_field_errors'] = err.messages
        # We don't run .validate() because field-validation failed and thus `attrs` may not be complete.
        # which in turn can cause inconsistent validation errors.
        if not self._errors:
            try:
                attrs = self.validate(attrs)
            except ValidationError as err:
                if hasattr(err, 'message_dict'):
                    for field_name, error_messages in err.message_dict.items():
                        self._errors[field_name] = self._errors.get(field_name, []) + list(error_messages)
                elif hasattr(err, 'messages'):
                    self._errors['non_field_errors'] = err.messages
  
          return attrs
  
      def validate(self, attrs):
          """
keep keep keep keep replace replace replace replace keep keep keep keep keep
 Moved model validation from .perform_validation() to .validate() 
rest_framework/serializers.py