code: def __list_fields(cls):
          
          for name in cls._doc_type.mapping:
              field = cls._doc_type.mapping[name]
              yield name, field, False
  
          if hasattr(cls.__class__, '_index'):
              if not cls._index._mapping:
                  return
              for name in cls._index._mapping:
                  # don't return fields that are in _doc_type
                  if name in cls._doc_type.mapping:
                      continue
                  field = cls._index._mapping[name]
                  yield name, field, True
docs: Get all the fields defined for our class, if we have an Index, try
          looking at the index mappings as well, mark the fields from Index as
          optional.