code: def _get_data(self, fields=None, compare=True):
          
          fields = fields or []
          if self._key is None or self._key == '' or self._key == 0:
              d = {}
              for k, v in self.properties.items():
                  #test fields
                  if fields and k not in fields:
                      continue
  #                if not isinstance(v, ManyToMany):
                  if v.property_type == 'compound':
                      continue
                  if v.sequence:
                      continue
                  if not isinstance(v, ManyToMany):
                      x = v.get_value_for_datastore(self)
                      if isinstance(x, Model):
                          x = x._key
                      elif x is None or (k==self._primary_field and not x):
                          if isinstance(v, DateTimeProperty) and v.auto_now_add:
                              x = v.now()
                          elif (v.auto_add or (not v.auto and not v.auto_add)):
                              x = v.default_value()
                  else:
                      x = v.get_value_for_datastore(self, cached=True)
                  if x is not None and not x is Lazy:
                      d[k] = x
          else:
              d = {}
              d[self._primary_field] = self._key
              for k, v in self.properties.items():
                  if fields and k not in fields:
                      continue
                  if v.property_type == 'compound':
                      continue
                  t = self._old_values.get(k, None)
                  if not isinstance(v, ManyToMany):
                      x = v.get_value_for_datastore(self)
                      if isinstance(x, Model):
                          x = x._key
                  else:
                      x = v.get_value_for_datastore(self, cached=True)
                  if not x is Lazy:
                      if (compare and t != self.field_str(x)) or not compare:
                          d[k] = x
          
          return d
docs: Get the changed property, it'll be used to save the object
          If compare is False, then it'll include all data not only changed property