How to create a filter form for a (class based) generic object list in Django?

Viewed 9638

I'm using Django 1.3's class based generic view to display a list of images, but I want to add a filter that enables the user to narrow down the displayed results.

My current approach works, but feels quite hackish:

class ImageFilterForm(ModelForm):
    class Meta:
        model = Image

class ImageListView(ListView):
    model = Image

    def get_queryset(self):
        qs = Image.objects.select_related()  
        for item in self.request.GET:
            key, value = item, self.request.GET.getlist(item)
            # ... Filtering here ...
        return qs

    def get_context_data(self, **kwargs):
        context = super(ImageListView, self).get_context_data(**kwargs)
        context['filter_form'] = ImageFilterForm(self.request.GET)
        return context

Are there better means to add custom filtering to a generic view?

2 Answers
Related