docs: def _load_data(self):
          """
          Load all fixtures from :attr:`fixtures_dir`
          """
          filenames = []
          model_identifiers = defaultdict(list)
  
          # attempt to load fixture files from given directories (first pass)
          # for each valid model fixture file, read it into the cache and get the
          # list of identifier keys from it
          for fixtures_dir in self.fixture_dirs:
              for filename in os.listdir(fixtures_dir):
                  path = os.path.join(fixtures_dir, filename)
                  file_ext = filename[filename.find('.')+1:]
  
                  # make sure it's a valid fixture file
                  if os.path.isfile(path) and file_ext in {'yml', 'yaml'}:
                      filenames.append(filename)
                      with open(path) as f:
                          self._cache[filename] = f.read()
  
                      # preload to determine identifier keys
                      with self._preloading_env() as env:
                          rendered_yaml = env.get_template(filename).render()
                          data = yaml.load(rendered_yaml)
                          if data:
                              class_name = filename[:filename.rfind('.')]
                              model_identifiers[class_name] = list(data.keys())
  
          # second pass where we can render the jinja templates with knowledge of all
          # the model identifier keys (allows random_model and random_models to work)
          for filename in filenames:
              self._load_from_yaml(filename, model_identifiers)
  
          self._loaded = True