code: def collect_subclasses(self):  # type: () -> Dict[str, List[Tuple[str, str]]]
          
          result = {}  # type: Dict[str, List[Tuple[str, str]]]
          for loader, module_name, is_pkg in walk_packages(path=[settings.BASE_DIR]):
              subclasses_from_module = self._collect_classes_from_module(module_name)
              if subclasses_from_module:
                  result[module_name] = subclasses_from_module
          return result
docs: Collect all subclasses of user-defined base classes from project.
          :return: Dictionary from module name to list of tuples.
          First element of tuple is model name and second is alias.
          Currently we set alias equal to model name,
          but in future functionality of aliasing subclasses can be added.