def tag_cloud(self, other_model=None, queryset=None, published=True, on_site=False): from taggit.models import TaggedItem if on_site: queryset = queryset.on_site() tag_ids = self._taglist(other_model, queryset) kwargs = {} if published: kwargs = { "object_id__in": self.model.objects.published(), "content_type": ContentType.objects.get_for_model(self.model), } kwargs["tag_id__in"] = tag_ids counted_tags = dict( TaggedItem.objects.filter(**kwargs).values("tag").annotate( count=models.Count("tag")).values_list("tag", "count")) tags = TaggedItem.tag_model().objects.filter( pk__in=counted_tags.keys()) for tag in tags: tag.count = counted_tags[tag.pk] return sorted(tags, key=lambda x: -x.count)
def get_tag_cloud(model, queryset, tags_filter=None): if tags_filter is None: tags_filter = set() for item in queryset.all(): tags_filter.update(item.tags.all()) tags_filter = set([tag.id for tag in tags_filter]) tags = set( TaggedItem.objects.filter( content_type__model=model.__name__.lower()).values_list('tag_id', flat=True)) if tags_filter is not None: tags = tags.intersection(tags_filter) tag_ids = list(tags) kwargs = TaggedItem.bulk_lookup_kwargs(queryset) kwargs['tag_id__in'] = tag_ids counted_tags = dict( TaggedItem.objects.filter(**kwargs).values('tag').annotate( count=models.Count('tag')).values_list('tag', 'count')) tags = TaggedItem.tag_model().objects.filter(pk__in=counted_tags.keys()) for tag in tags: tag.count = counted_tags[tag.pk] return sorted(tags, key=lambda x: -x.count)
def get_tag_cloud(model, queryset, tags_filter=None): if tags_filter is None: tags_filter = set() for item in queryset.all(): tags_filter.update(item.tags.all()) tags_filter = set([tag.id for tag in tags_filter]) tags = set(TaggedItem.objects.filter( content_type__model=model.__name__.lower() ).values_list('tag_id', flat=True)) if tags_filter is not None: tags = tags.intersection(tags_filter) tag_ids = list(tags) kwargs = TaggedItem.bulk_lookup_kwargs(queryset) kwargs['tag_id__in'] = tag_ids counted_tags = dict(TaggedItem.objects .filter(**kwargs) .values('tag') .annotate(count=models.Count('tag')) .values_list('tag', 'count')) tags = TaggedItem.tag_model().objects.filter(pk__in=counted_tags.keys()) for tag in tags: tag.count = counted_tags[tag.pk] return sorted(tags, key=lambda x: -x.count)
def userfeed_tags(user): '''Return all the UserFeed tags for a user.''' #ct = ContentType.objects.get_for_model(UserFeed) kwargs = { "userfeed__in": UserFeed.objects.filter(user=user) } tags = TaggedItem.tag_model().objects.filter(**kwargs).distinct() return tags
def tag_cloud(self, other_model=None, queryset=None, published=True): from taggit.models import TaggedItem tag_ids = self._taglist(other_model, queryset) kwargs = {} if published: kwargs = TaggedItem.bulk_lookup_kwargs(self.model.objects.published()) kwargs['tag_id__in'] = tag_ids counted_tags = dict(TaggedItem.objects .filter(**kwargs) .values('tag') .annotate(count=models.Count('tag')) .values_list('tag', 'count')) tags = TaggedItem.tag_model().objects.filter(pk__in=counted_tags.keys()) for tag in tags: tag.count = counted_tags[tag.pk] return sorted(tags, key=lambda x: -x.count)