docs: def serialize_instance(instance):
      """
      Since Django 1.6 items added to the session are no longer pickled,
      but JSON encoded by default. We are storing partially complete models
      in the session (user, account, token, ...). We cannot use standard
      Django serialization, as these are models are not "complete" yet.
      Serialization will start complaining about missing relations et al.
      """
      data = {}
      for k, v in instance.__dict__.items():
          if k.startswith('_') or callable(v):
              continue
          try:
              field = instance._meta.get_field(k)
              if isinstance(field, BinaryField):
                  v = force_str(base64.b64encode(v))
              elif isinstance(field, FileField):
                  if v and not isinstance(v, six.string_types):
                      v = v.name
              # Check if the field is serializable. If not, we'll fall back
              # to serializing the DB values which should cover most use cases.
              try:
                  json.dumps(v, cls=DjangoJSONEncoder)
              except TypeError:
                  v = field.get_prep_value(v)
                  k = SERIALIZED_DB_FIELD_PREFIX + k
          except FieldDoesNotExist:
              pass
          data[k] = v
      return json.loads(json.dumps(data, cls=DjangoJSONEncoder))