docs: def dump(self, fields=None, exclude=None):
          """
          Dump current object to dict, but the value is string
          for manytomany fields will not automatically be dumpped, only when
          they are given in fields parameter
          """
          exclude = exclude or []
          d = {}
          if fields and self._primary_field not in fields:
              fields = list(fields)
              fields.append(self._primary_field)
          for k, v in self.properties.items():
              if ((not fields) or (k in fields)) and (not exclude or (k not in exclude)):
                  if not isinstance(v, ManyToMany):
                      t = v.get_value_for_datastore(self)
                      if t is Lazy:
                          self.refresh()
                          t = v.get_value_for_datastore(self)
                      if isinstance(t, Model):
                          t = t._key
                      d[k] = v.to_str(t)
                  else:
                      if fields:
                         d[k] = ','.join([str(x) for x in getattr(self, v._lazy_value(), [])])
          if self._primary_field and d and self._primary_field not in d:
              d[self._primary_field] = str(self._key)
          return d