docs: def _get_fields_by_mro(klass, field_class, ordered=False):
      """Collect fields from a class, following its method resolution order. The
      class itself is excluded from the search; only its parents are checked. Get
      fields from ``_declared_fields`` if available, else use ``__dict__``.
  
      :param type klass: Class whose fields to retrieve
      :param type field_class: Base field class
      """
      mro = inspect.getmro(klass)
      # Loop over mro in reverse to maintain correct order of fields
      return sum(
          (
              _get_fields(
                  getattr(base, '_declared_fields', base.__dict__),
                  field_class,
                  ordered=ordered,
              )
              for base in mro[:0:-1]
          ),
          [],
      )