from django.utils.translation import ugettext_lazy as _
from django.contrib.admin import SimpleListFilter
from taggit.models import TaggedItem
class TaggitListFilter(SimpleListFilter):
"""
A custom filter class that can be used to filter by taggit tags in the admin.
"""
# Human-readable title which will be displayed in the
# right admin sidebar just above the filter options.
title = _('tags')
# Parameter for the filter that will be used in the URL query.
parameter_name = 'tag'
def lookups(self, request, model_admin):
"""
Returns a list of tuples. The first element in each tuple is the coded value
for the option that will appear in the URL query. The second element is the
human-readable name for the option that will appear in the right sidebar.
"""
list = []
tags = TaggedItem.tags_for(model_admin.model)
for tag in tags:
list.append( (tag.name, _(tag.name)) )
return list
def queryset(self, request, queryset):
"""
Returns the filtered queryset based on the value provided in the query
string and retrievable via `self.value()`.
"""
if self.value():
return queryset.filter(tags__name__in=[self.value()])
Comments