def query_tags(order=None, orderby=None, limit=None): """ Query the tags, with usage count included. This interface is mainly used by the ``get_tags`` template tag. """ from taggit.models import Tag, TaggedItem # feature is still optional EntryModel = get_entry_model() ct = ContentType.objects.get_for_model(EntryModel) # take advantage of local caching. published_filter = {'{0}__status'.format(ct.model.lower()): EntryModel.PUBLISHED} # e.g. entry__status=, or newsitem__status= entry_tag_ids = TaggedItem.objects.filter(content_type=ct).filter(**published_filter).values_list('tag_id') # get tags queryset = Tag.objects.filter(id__in=entry_tag_ids) queryset = queryset.annotate(count=Count('taggit_taggeditem_items')) # Related name differed in Django 1.2 # Ordering if orderby: queryset = queryset.order_by(*_get_order_by(order, orderby, TAG_ORDER_BY_FIELDS)) else: queryset = queryset.order_by('-count') # Limit if limit: queryset = queryset[:limit] return queryset
def query_tags(order=None, orderby=None, limit=None): """ Query the tags, with usage count included. This interface is mainly used by the ``get_tags`` template tag. """ from taggit.models import Tag, TaggedItem # feature is still optional EntryModel = get_entry_model() ct = ContentType.objects.get_for_model( EntryModel) # take advantage of local caching. published_filter = { '{0}__status'.format(ct.model.lower()): EntryModel.PUBLISHED } # e.g. entry__status=, or newsitem__status= entry_tag_ids = TaggedItem.objects.filter(content_type=ct).filter( **published_filter).values_list('tag_id') # get tags queryset = Tag.objects.filter(id__in=entry_tag_ids) queryset = queryset.annotate(count=Count( 'taggit_taggeditem_items')) # Related name differed in Django 1.2 # Ordering if orderby: queryset = queryset.order_by( *_get_order_by(order, orderby, TAG_ORDER_BY_FIELDS)) else: queryset = queryset.order_by('-count') # Limit if limit: queryset = queryset[:limit] return queryset
def query_tags(order=None, orderby=None, limit=None): """ Query the tags, with usage count included. This interface is mainly used by the ``get_tags`` template tag. """ from taggit.models import Tag, TaggedItem # feature is still optional # Get queryset filters for published entries EntryModel = get_entry_model() ct = ContentType.objects.get_for_model(EntryModel) # take advantage of local caching. # In Django 1.5, it was possible to call TaggedItem.objects.filter(entry__status=..) # this rel-name depended on the model name. In Django 1.6, this is no longer possible, # so have to run a subquery for the object id instead. entry_filter = { 'status': EntryModel.PUBLISHED } if appsettings.FLUENT_BLOGS_FILTER_SITE_ID: entry_filter['parent_site'] = settings.SITE_ID entry_qs = EntryModel.objects.filter(**entry_filter).values_list('pk') # get tags queryset = Tag.objects.filter( taggit_taggeditem_items__content_type=ct, taggit_taggeditem_items__object_id__in=entry_qs ).annotate( count=Count('taggit_taggeditem_items') ) # Ordering if orderby: queryset = queryset.order_by(*_get_order_by(order, orderby, TAG_ORDER_BY_FIELDS)) else: queryset = queryset.order_by('-count') # Limit if limit: queryset = queryset[:limit] return queryset
def query_entries(queryset=None, year=None, month=None, day=None, category=None, category_slug=None, tag=None, tag_slug=None, author=None, author_slug=None, future=False, order=None, orderby=None, limit=None, ): """ Query the entries using a set of predefined filters. This interface is mainly used by the ``get_entries`` template tag. """ if queryset is None: queryset = get_entry_model().objects.all() if not future: queryset = queryset.published() if year: queryset = queryset.filter(publication_date__year=year) if month: queryset = queryset.filter(publication_date__month=month) if day: queryset = queryset.filter(publication_date__day=day) # The main category/tag/author filters if category: if isinstance(category, basestring): queryset = queryset.filter(categories__slug=category) elif isinstance(category, (int, long)): queryset = queryset.filter(categories=category) else: raise ValueError("Expected slug or ID for the 'category' parameter") if category_slug: queryset = queryset.filter(categories__slug=category) if tag: if isinstance(tag, basestring): queryset = queryset.filter(tags__slug=tag) elif isinstance(tag, (int, long)): queryset = queryset.filter(tags=tag) else: raise ValueError("Expected slug or ID for 'tag' parameter.") if tag_slug: queryset = queryset.filter(tags__slug=tag) if author: if isinstance(author, basestring): queryset = queryset.filter(author__username=author) elif isinstance(author, (int, long)): queryset = queryset.filter(author=author) else: raise ValueError("Expected slug or ID for 'author' parameter.") if author_slug: queryset = queryset.filter(author__username=author_slug) # Ordering if orderby: queryset = queryset.order_by(*_get_order_by(order, orderby, ENTRY_ORDER_BY_FIELDS)) else: queryset = queryset.order_by('-publication_date') # Limit if limit: queryset = queryset[:limit] return queryset
def query_entries(queryset=None, year=None, month=None, day=None, category=None, category_slug=None, tag=None, tag_slug=None, author=None, author_slug=None, future=False, order=None, orderby=None, limit=None, ): """ Query the entries using a set of predefined filters. This interface is mainly used by the ``get_entries`` template tag. """ if queryset is None: queryset = get_entry_model().objects.all() if appsettings.FLUENT_BLOGS_FILTER_SITE_ID: queryset = queryset.parent_site(settings.SITE_ID) if not future: queryset = queryset.published() if year: queryset = queryset.filter(publication_date__year=year) if month: queryset = queryset.filter(publication_date__month=month) if day: queryset = queryset.filter(publication_date__day=day) # The main category/tag/author filters if category: if isinstance(category, basestring): queryset = queryset.categories(category) elif isinstance(category, (int, long)): queryset = queryset.filter(categories=category) else: raise ValueError("Expected slug or ID for the 'category' parameter") if category_slug: queryset = queryset.categories(category) if tag: if isinstance(tag, basestring): queryset = queryset.tagged(tag) elif isinstance(tag, (int, long)): queryset = queryset.filter(tags=tag) else: raise ValueError("Expected slug or ID for 'tag' parameter.") if tag_slug: queryset = queryset.tagged(tag) if author: if isinstance(author, basestring): queryset = queryset.authors(author) elif isinstance(author, (int, long)): queryset = queryset.filter(author=author) else: raise ValueError("Expected slug or ID for 'author' parameter.") if author_slug: queryset = queryset.authors(author_slug) # Ordering if orderby: queryset = queryset.order_by(*_get_order_by(order, orderby, ENTRY_ORDER_BY_FIELDS)) else: queryset = queryset.order_by('-publication_date') # Limit if limit: queryset = queryset[:limit] return queryset