def METHOD_NAME(  # noqa: CCR001
    cls,
    node_list: NodeList = None,
    parsed_map: Dict = None,
    source_relation: str = None,
    recurrent: bool = False,
) -> List[str]:
    """
    Iterates related models recursively to extract relation strings of
    nested not visited models.
    :return: list of relation strings to be passed to select_related
    :rtype: List[str]
    """
    if not node_list:
        if cls.__relation_map__:
            return cls.__relation_map__
        node_list = NodeList()
        parsed_map = dict()
        current_node = node_list.add(node_class=cls)
    else:
        current_node = node_list[-1]
    relations = sorted(cls.extract_related_names())
    processed_relations: List[str] = []
    for relation in relations:
        if not current_node.visited(relation):
            target_model = cls.Meta.model_fields[relation].to
            node_list.add(
                node_class=target_model,
                relation_name=relation,
                parent_node=current_node,
            )
            relation_key = f"{cls.get_name()}_{relation}"
            parsed_map = cast(Dict, parsed_map)
            deep_relations = parsed_map.get(relation_key)
            if not deep_relations:
                deep_relations = target_model.METHOD_NAME(
                    source_relation=relation,
                    node_list=node_list,
                    recurrent=True,
                    parsed_map=parsed_map,
                )
                parsed_map[relation_key] = deep_relations
            processed_relations.extend(deep_relations)
    result = cls._get_final_relations(processed_relations, source_relation)
    if not recurrent:
        cls.__relation_map__ = result
    return result