docs: def validate(self, data=None, only=None, exclude=None):
          """
          Validate the data for all fields and return whether the validation was successful.
          This method also retains the validated data in ``self.data`` so that it can be accessed later.
  
          If data for a field is not provided in ``data`` then this validator will check against the
          provided model instance.
  
          This is usually the method you want to call after creating the validator instance.
  
          :param data: Dictionary of data to validate.
          :param only: List or tuple of fields to validate.
          :param exclude: List or tuple of fields to exclude from validation.
          :return: True if validation is successful, otherwise False.
          """
          data = data or {}
          only = only or self._meta.only
          exclude = exclude or self._meta.exclude
  
          for name, field in self.instance._meta.fields.items():
              if name in exclude or (only and name not in only):
                  continue
              try:
                  data.setdefault(name, getattr(self.instance, name, None))
              except (peewee.DoesNotExist):
                  if PEEWEE3:
                      instance_data = self.instance.__data__
                  else:
                      instance_data = self.instance._data
                  data.setdefault(name, instance_data.get(name, None))
  
          # This will set self.data which we should use from now on.
          super().validate(data=data, only=only, exclude=exclude)
  
          if not self.errors:
              self.perform_index_validation(self.data)
  
          return (not self.errors)