def get_concept_item_mapping(self, concepts=None, lang=None):
        """
        Get mapping of concepts to items belonging to concept.

        Args:
            concepts (list of Concept): Defaults to None meaning all concepts
            lang (str): language of concepts, if None use language of concepts

        Returns:
            dict: concept (int) -> list of item ids (int)
        """
        if concepts is None:
            concepts = self.filter(active=True)
            if lang is not None:
                concepts = concepts.filter(lang=lang)
        if lang is None:
            languages = set([concept.lang for concept in concepts])
            if len(languages) > 1:
                raise Exception('Concepts has multiple languages')
            lang = list(languages)[0]
        item_lists = Item.objects.filter_all_reachable_leaves_many([json.loads(concept.query)
                                                                    for concept in concepts], lang)
        return dict(zip([c.pk for c in concepts], item_lists))