Skip to main content

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

Project description

https://badge.fury.io/py/dj-url-filter.svg https://readthedocs.org/projects/django-url-filter/badge/?version=latest https://codecov.io/gh/enjoy2000/django-url-filter/branch/master/graph/badge.svg

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

Notes

This is a forked version of https://github.com//miki725/django-url-filter to add Django 4 support and my other projects.

Overview

The main goal of Django URL Filter 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 URL Filter 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 3.9+

  • Django 3.4+

  • 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 dj-url-filter

Usage Example

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

from url_filter.integrations.drf import DjangoFilterBackend


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 url_filter.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 URL Filter 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

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. SQLAlchemy query 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!)

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

dj_url_filter-0.4.4.tar.gz (29.5 kB view details)

Uploaded Source

Built Distribution

dj_url_filter-0.4.4-py3-none-any.whl (36.4 kB view details)

Uploaded Python 3

File details

Details for the file dj_url_filter-0.4.4.tar.gz.

File metadata

  • Download URL: dj_url_filter-0.4.4.tar.gz
  • Upload date:
  • Size: 29.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.1 CPython/3.10.8 Darwin/21.6.0

File hashes

Hashes for dj_url_filter-0.4.4.tar.gz
Algorithm Hash digest
SHA256 80cb8d71cbc296e10475b41d58ab8e172e9e8370ae08e5737bf68b9d7061a07e
MD5 7611677054e4e12b54a5b9d85fbeb90b
BLAKE2b-256 01f4b2e3f84e8e973df4f58061f6f227f246e0d5be590aaf7f2cf5ff9ca2ba0f

See more details on using hashes here.

File details

Details for the file dj_url_filter-0.4.4-py3-none-any.whl.

File metadata

  • Download URL: dj_url_filter-0.4.4-py3-none-any.whl
  • Upload date:
  • Size: 36.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.1 CPython/3.10.8 Darwin/21.6.0

File hashes

Hashes for dj_url_filter-0.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 43773a8a9c169e0b5539b916cb55693695a20c13ad0aeaa7a8ffd7f964ebd2a9
MD5 2e729c66883c111b1fbf70b128ef47ba
BLAKE2b-256 1431a0bd12b58a3f3517d2c7a78c3b8f4e5e57de84b50448fd39ddc20098fe1f

See more details on using hashes here.

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