def _populate_content_type_caches(self, types):
        """
        Populate internal caches for all content types passed
        """

        counts_by_type = {}
        for region, counts in self._fetch_content_type_counts().items():
            for pk, ct_idx in counts:
                counts_by_type.setdefault(
                    self.item._feincms_content_types[ct_idx], []
                ).append((region, pk))

        # Resolve abstract to concrete content types
        if types is self.item._feincms_content_types:
            # If we come from _fetch_regions, we don't need to do
            # any type resolving
            content_types = self.item._feincms_content_types
        else:
            content_types = (
                cls
                for cls in self.item._feincms_content_types
                if issubclass(cls, tuple(types))
            )

        for cls in content_types:
            counts = counts_by_type.get(cls)
            if cls not in self._cache["cts"]:
                if counts:
                    self._cache["cts"][cls] = list(
                        cls.get_queryset().filter(
                            reduce(
                                operator.or_,
                                (Q(region=r[0], parent=r[1]) for r in counts),
                            )
                        )
                    )
                else:
                    self._cache["cts"][cls] = []

        # share this content proxy object between all content items
        # so that each can use obj.parent.content to determine its
        # relationship to its siblings, etc.
        for objects in self._cache["cts"].values():
            for obj in objects:
                setattr(obj.parent, "_content_proxy", self)

        Populate internal caches for all content types passed
        
feincms/models.py