@classmethod
def __list_fields(cls):
    """
        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.
        """
    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:
            if name in cls._doc_type.mapping:
                continue
            field = cls._index._mapping[name]
            yield name, field, True
