Skip to main content

Django UFilter

https://badge.fury.io/py/django-ufilter.svg https://readthedocs.org/projects/django-ufilter/badge/?version=latest

Django UFilter provides a safe way to filter data via human-friendly URLs.

This project was forked from https://github.com/miki725/django-url-filter, due to the lack of maintenance in the original one.

Overview

The main goal of Django UFilter is to provide an easy URL interface for filtering data. It allows the user to safely filter by model attributes and also allows to specify the lookup type for each filter (very much like Django’s filtering system in ORM).

For example the following will retrieve all items where the id is 5 and title contains "foo":

example.com/listview/?id=5&title__contains=foo

In addition to basic lookup types, Django UFilter allows to use more sophisticated lookups such as in or year. For example:

example.com/listview/?id__in=1,2,3&created__year=2013

Requirements

  • Python 2.7, 3.x, pypy or pypy3

  • Django 1.8+ (there are plans to support older Django versions)

  • Django REST Framework 2 or 3 (only if you want to use DRF integration)

Installing

Easiest way to install this library is by using pip:

$ pip install django-ufilter

Usage Example

To make example short, it demonstrates Django UFilter integration with Django REST Framework but it can be used without DRF (see below).

from django_ufilter.integrations.drf import DRFFilterBackend


class UserViewSet(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_backends = [DjangoFilterBackend]
    filter_fields = ['username', 'email']

Alternatively filterset can be manually created and used directly to filter querysets:

from django.http import QueryDict
from django_ufilter.filtersets import ModelFilterSet


class UserFilterSet(ModelFilterSet):
    class Meta(object):
        model = User

query = QueryDict('email__contains=gmail&joined__gt=2015-01-01')
fs = UserFilterSet(data=query, queryset=User.objects.all())
filtered_users = fs.filter()

Above will automatically allow the use of all of the Django UFilter features. Some possibilities:

  • get user with id 5

    example.com/users/?id=5

  • get user with id either 5, 10 or 15

    example.com/users/?id__in=5,10,15

  • get user with id between 5 and 10

    example.com/users/?id__range=5,10

  • get user with username “foo”

    example.com/users/?username=foo

  • get user with username containing case insensitive “foo”

    example.com/users/?username__icontains=foo

  • get user where username does NOT contain “foo”

    example.com/users/?username__icontains!=foo

  • get user who joined in 2015 as per user profile

    example.com/users/?profile__joined__year=2015

  • get user who joined in between 2010 and 2015 as per user profile

    example.com/users/?profile__joined__range=2010-01-01,2015-12-31

  • get user who joined in after 2010 as per user profile

    example.com/users/?profile__joined__gt=2010-01-01

Available lookups:

  • contains: Match when string contains given substring.

  • day: Match by day of the month.

  • endswith: Match when string ends with given substring.

  • exact: Match exactly the value as is.

  • gt: Match when value is greater then given value.

  • gte: Match when value is greater or equal then given value.

  • hour: Match by the hour (24 hour) value of the timestamp.

  • icontains: Case insensitive match when string contains given substring.

  • iendswith: Case insensitive match when string ends with given substring.

  • iexact: Case insensitive match exactly the value as is.

  • iin: Case insensitive match when value is any of given comma separated values.

  • in: Match when value is any of given comma separated values.

  • iregex: Case insensitive match string by regex pattern.

  • isnull: Match when value is NULL.

  • istartswith: Case insensitive match when string starts with given substring.

  • lt: Match when value is less then given value.

  • lte: Match when value is less or equal then given value.

  • minute: Match by the minute value of the timestamp.

  • month: Match by the month value of the timestamp.

  • range: Match when value is within comma separated range.

  • regex: Match string by regex pattern.

  • second: Match by the second value of the timestamp.

  • startswith: Match when string starts with given substring.

  • week_day: Match by week day (1-Sunday to 7-Saturday) of the timestamp.

  • year: Match by the year value of the timestamp.

  • len: Match the length of a given ArrayField

Features

  • Human-friendly URLs

    Filter querystring format looks very similar to syntax for filtering in Django ORM. Even negated filters are supported! Some examples:

    example.com/users/?email__contains=gmail&joined__gt=2015-01-01
    example.com/users/?email__contains!=gmail  # note !
  • Related models

    Support related fields so that filtering can be applied to related models. For example:

    example.com/users/?profile__nickname=foo
  • Decoupled filtering

    How URLs are parsed and how data is filtered is decoupled. This allows the actual filtering logic to be decoupled from Django hence filtering is possible not only with Django ORM QuerySet but any set of data can be filtered (e.g. plain Python objects) assuming corresponding filtering backend is implemented.

  • Usage-agnostic

    This library decouples filtering from any particular usage-pattern. It implements all the basic building blocks for creating filtersets but it does not assume how they will be used. To make the library easy to use, it ships with some integrations with common usage patterns like integration with Django REST Framework. This means that its easy to use in custom applications with custom requirements (which is probably most of the time!)

Metadata

Release files for django-ufilter 0.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-ufilter 0.4.3
File Size Uploaded Provenance Actions
django_ufilter-0.4.3.tar.gz 39.6 kB Without provenance Details for django_ufilter-0.4.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for django-ufilter 0.4.3
File Interpreter ABI Platform Actions
django_ufilter-0.4.3-py3-none-any.whl Python 3 none any Details for django_ufilter-0.4.3-py3-none-any.whl

Total release size: 71.4 kB

Release files / django_ufilter-0.4.3.tar.gz

Download URL django_ufilter-0.4.3.tar.gz
Size 39.6 kB
Tags Source
SHA-256 checksum
How to use checksums
cc5077f65e1c42e9c498c9f04f440c3b542e14ea94443a14d920ed248f6efd3d
BLAKE2b-256 checksum
How to use checksums
99b99fe54ac22dc74a61f06942035649ee5f35ac820cfb002085eb170982e69f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.4.2 CPython/3.11.0 Linux/5.15.0-1036-azure

Release files / django_ufilter-0.4.3-py3-none-any.whl

Download URL django_ufilter-0.4.3-py3-none-any.whl
Size 31.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f29a9fdc5dfc57de4d158d9b5f2de3ebcd2069d10afff1b8c72b7029d872efe4
BLAKE2b-256 checksum
How to use checksums
9c22574c2c5704e648fb9df87ba3d16c4e862a956475d49b184578734120e0db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.4.2 CPython/3.11.0 Linux/5.15.0-1036-azure

Security for django-ufilter 0.4.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.4.3 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page