code: def create_shot_model(self, project, releasetype):
          
          rootdata = treemodel.ListItemData(['Name'])
          rootitem = treemodel.TreeItem(rootdata)
          for seq in project.sequence_set.all():
              seqdata = djitemdata.SequenceItemData(seq)
              seqitem = treemodel.TreeItem(seqdata, rootitem)
              for shot in seq.shot_set.all():
                  shotdata = djitemdata.ShotItemData(shot)
                  shotitem = treemodel.TreeItem(shotdata, seqitem)
                  for task in shot.tasks.all():
                      taskdata = djitemdata.TaskItemData(task)
                      taskitem = treemodel.TreeItem(taskdata, shotitem)
                      #get all mayafiles
                      taskfiles = task.taskfile_set.filter(releasetype=releasetype, typ=self._filetype)
                      # get all descriptor values as a list. disctinct eliminates duplicates.
                      for d in taskfiles.order_by('descriptor').values_list('descriptor', flat=True).distinct():
                          ddata = treemodel.ListItemData([d,])
                          treemodel.TreeItem(ddata, taskitem)
          shotmodel = treemodel.TreeModel(rootitem)
          return shotmodel
docs: Create and return a new tree model that represents shots til descriptors
  
          The tree will include sequences, shots, tasks and descriptors of the given releaetype.
  
          :param releasetype: the releasetype for the model
          :type releasetype: :data:`djadapter.RELEASETYPES`
          :param project: the project of the shots
          :type project: :class:`djadapter.models.Project`
          :returns: the created tree model
          :rtype: :class:`jukeboxcore.gui.treemodel.TreeModel`
          :raises: None