docs: def update(self, **kwargs):
          ''' validates the given data against this object's rules and then
          updates '''
          redis = type(self).get_redis()
          errors = ValidationErrors()
  
          for fieldname, field in self.proxy:
              if not field.fillable:
                  continue
  
              given = kwargs.get(fieldname)
  
              if given is None:
                  continue
  
              try:
                  value = field.validate(kwargs.get(fieldname), redis)
              except BadField as e:
                  errors.append(e)
                  continue
  
              setattr(
                  self,
                  fieldname,
                  value
              )
  
          if errors.has_errors():
              raise errors
  
          return self.save()