I've created a Filter builder in my application and I would like to improve it removing unnecessary parameters Value=None of my functions popular and unanswered, working like javascript for example. The querystring parameters can be: none (all records), popular=1, unanswered=1, by=username
filters.py
class Filters:
    queryset = None
    def apply(self, queryset):
        self.queryset = queryset
        for key, value in self.request.items():
            if key in self.filters and hasattr(self, key):
                return getattr(self, key)(value)
        return self.queryset
class ThreadFilter(Filters):
    filters = ('by', 'popular', 'unanswered')
    request = None
    def __init__(self, request):
        self.request = request
    def by(self, username):
        return self.queryset.filter(username=username)
    def popular(self, value=None):
        return self.queryset.order_by('-replies_count')
    def unanswered(self, value=None):
        return self.queryset.filter(replies_count=0)
views.py
class ThreadsView(generic.ListView):
    model = Thread
    template_name = "threads/index.html"
    def get_queryset(self):
        thread_filter = ThreadFilter(self.request.GET)
        threads = thread_filter.apply(Thread.objects.all())
        channel_slug = self.kwargs.get('channel_slug', False)
        if channel_slug:
            threads = threads.filter(channel__slug=channel_slug)
        return threads
To be clear, I'm looking for an elegant way to avoid a logical test since I'm beginner in Python and it can be done in other languages like php
if value == "1": 
    return getattr(self, key) 
return getattr(self, key)(value)
