code: def save(self, validate=False):
          
          # Don't allow this function to be called if we are already updating the
          # data for the form.
          if self._in_call:
              return
  
          # We're clear - pass on to all layouts/widgets.
          invalid = []
          for layout in self._layouts:
              try:
                  layout.save(validate=validate)
              except InvalidFields as exc:
                  invalid.extend(exc.fields)
  
          # Check for any bad data and raise exception if needed.
          if len(invalid) > 0:
              raise InvalidFields(invalid)
docs: Save the current values in all the widgets back to the persistent data storage.
  
          :param validate: Whether to validate the data before saving.
  
          Calling this while setting the `data` field (e.g. in a widget callback) will have no
          effect.
  
          When validating data, it can throw an Exception for any