Skip to main content

Easy filters for your Generic ListView with Django.

Project description

django-generic-filters is a toolkit to filter results of Django’s ListView, using forms.

Main use cases are obviously search forms and filtered lists.

As a developer, given you have a ListView, in order to let the user filter the results:

  • use a form to easily render the filters as HTML;

  • the user typically sends the filters via GET;

  • validate the user’s input using a Django form;

  • filter the Django view’s queryset using form’s cleaned data.

Build Status

Example

views.py

from django_genericfilters.views import FilteredListView


class UserListView(FilteredListView):
    # ListView options. FilteredListView inherits from ListView.
    model = User
    template_name = 'user/user_list.html'
    paginate_by = 10
    context_object_name = 'users'

    # FormMixin options. FilteredListView inherits from FormMixin.
    form_class = UserListForm

    # FilteredListView options.
    search_fields = ['first_name', 'last_name', 'username', 'email']
    filter_fields = ['is_active', 'is_staff', 'is_superuser']
    default_order = 'last_name'

    def form_valid(self, form):
        """Return the queryset when form has been submitted."""
        queryset = super(UserListView, self).form_valid(form)

        # Handle specific fields of the custom ListForm
        # Others are automatically handled by FilteredListView.

        if form.cleaned_data['is_active'] == 'yes':
            queryset = queryset.filter(is_active=True)
        elif form.cleaned_data['is_active'] == 'no':
            queryset = queryset.filter(is_active=False)

        if form.cleaned_data['is_staff'] == 'yes':
            queryset = queryset.filter(is_staff=True)
        elif form.cleaned_data['is_staff'] == 'no':
            queryset = queryset.filter(is_staff=False)

        if form.cleaned_data['is_superuser'] == 'yes':
            queryset = queryset.filter(is_superuser=True)
        elif form.cleaned_data['is_superuser'] == 'no':
            queryset = queryset.filter(is_superuser=False)

        return queryset

forms.py

from django import forms
from django.utils.translation import ugettext_lazy as _
from django_genericfilters import forms as gf


class UserListForm(gf.QueryFormMixin, gf.OrderFormMixin, gf.FilteredForm):
    is_active = gf.ChoiceField(label=_('Status'),
                               choices=(('yes', _('Active')),
                                        ('no', _('Unactive'))))

    is_staff = gf.ChoiceField(label=_('Staff'))

    is_superuser = gf.ChoiceField(label=_('Superuser'))

    def get_order_by_choices(self):
        return [('date_joined', _(u'date joined')),
                ('last_login', _(u'last login')),
                ('last_name', _(u'Name'))]

Forms

Several form mixins are provided to cover frequent use cases:

  • OrderFormMixin with order_by and order_reverse fields.

  • QueryFormMixin for little full-text search using icontains.

See “mixin” documentation for details.

Ressources

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-generic-filters-1.6.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

django_generic_filters-1.6-py2-none-any.whl (19.3 kB view details)

Uploaded Python 2

File details

Details for the file django-generic-filters-1.6.tar.gz.

File metadata

File hashes

Hashes for django-generic-filters-1.6.tar.gz
Algorithm Hash digest
SHA256 7194575f0f40bd92a863bf5761efc1ba892c04cd466eb642177f945a3971919a
MD5 8dc2367cd8209c88f07b0c1523abdc58
BLAKE2b-256 3ec3fe46458fa932a2839294d484c3ab8c33608da2630f57005c541ef48fe56c

See more details on using hashes here.

Provenance

File details

Details for the file django_generic_filters-1.6-py2-none-any.whl.

File metadata

File hashes

Hashes for django_generic_filters-1.6-py2-none-any.whl
Algorithm Hash digest
SHA256 e67adf3d44ed7e946dde73b2b9aacddca51b6ec80bc03c355aed45841bb7f56c
MD5 81b9b43cd2caf1264079ed4b95b998cd
BLAKE2b-256 5333dcfd4efaade89a9a4bf34a09155d08fb91135f752572c3914beecc7fcde0

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page