=================
Django URL Filter
=================
.. image:: https://badge.fury.io/py/django-url-filter.svg
:target: http://badge.fury.io/py/django-url-filter
.. image:: https://readthedocs.org/projects/django-url-filter/badge/?version=latest
:target: http://django-url-filter.readthedocs.io/en/latest/?badge=latest
.. image:: https://drone.miki725.com/api/badges/miki725/django-url-filter/status.svg
:target: https://drone.miki725.com/miki725/django-url-filter
.. image:: https://codecov.io/gh/miki725/django-url-filter/branch/master/graph/badge.svg
:target: https://codecov.io/gh/miki725/django-url-filter
Django URL Filter provides a safe way to filter data via human-friendly URLs.
* Free software: MIT license
* GitHub: https://github.com/miki725/django-url-filter
* Documentation: http://django-url-filter.readthedocs.io/
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 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-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!)
History
-------
0.3.15 (2020-02-10)
~~~~~~~~~~~~~~~~~~~
* Fixes ``date`` lookup when using Django ORM.
See `#92 <https://github.com/miki725/django-url-filter/issues/92>`_.
0.3.14 (2019-10-30)
~~~~~~~~~~~~~~~~~~~
* Using ``CharField`` for ``regex`` filters.
See `#90 <https://github.com/miki725/django-url-filter/pull/90>`_.
* ``SQLAlchemyFilterBackend`` does not join models if already join path
is partially joined already.
* ``SQLAlchemyFilterBackend`` joins when ``selectinjoin`` is used.
0.3.13 (2019-07-28)
~~~~~~~~~~~~~~~~~~~
* Fixing `iregex` documentation in DRF coreapi integration.
0.3.12 (2019-01-24)
~~~~~~~~~~~~~~~~~~~
* Adding support for ``FilterSet.Meta.fields == '__all__'`` which is useful in DRF integration.
See `#39 <https://github.com/miki725/django-url-filter/pull/39>`_.
0.3.11 (2018-12-06)
~~~~~~~~~~~~~~~~~~~
* Not modifying queryset in Django backend if no filters were applied.
See `#73 <https://github.com/miki725/django-url-filter/pull/73>`_.
0.3.10 (2018-11-14)
~~~~~~~~~~~~~~~~~~~
* Only running ``distinct`` on queryset when one of filters is on one-to-many relation.
This should help with performance.
See `#26 <https://github.com/miki725/django-url-filter/issues/26>`_.
0.3.9 (2018-11-12)
~~~~~~~~~~~~~~~~~~
* Adding ``iin`` form field overwrite for SQLAlchemy as otherwise by default
``iin`` lookup is not validated correctly.
0.3.8 (2018-08-08)
~~~~~~~~~~~~~~~~~~
* Fixed ``SQLAlchemyFilterBackend`` by not joining nested models
when they are already eager loaded via ``query.options()``.
0.3.7 (2018-07-27)
~~~~~~~~~~~~~~~~~~
* Added ``StrictModel.empty`` which is new default.
It returns empty queryset when any filter validations fail.
* Fixed ``in`` lookup. Previously if any of the items were invalid
whole filter would fail and depending on strict mode would
either return all results, no results or will raise exception.
Now in ``StrictMode.empty`` and ``StrictMode.drop`` any invalid
items are ignored which will filter results for valid items.
See `#63 <https://github.com/miki725/django-url-filter/issues/64>`_.
* Added ability in ``ModelFilterSet`` to customize filter names
by providing ``extra_kwargs`` with field ``source``.
See `#66 <https://github.com/miki725/django-url-filter/issues/66>`_.
0.3.6 (2018-07-23)
~~~~~~~~~~~~~~~~~~
* Added support for ``extra_kwargs`` in ``ModelFilterSet.Meta``.
* Added ``CoreAPIURLFilterBackend`` which enables documented filters in swagger docs.
* Added ``iin`` lookup in plain and sqlalchemy backends.
* Fixing inconsistency between plain and Django ``week_day`` lookup.
Now both are consistent with ``1``-Monday and ``7``-Sunday.
0.3.5 (2018-02-27)
~~~~~~~~~~~~~~~~~~
* Django 2 support.
* Using `tox-travis <https://github.com/tox-dev/tox-travis>`_ for travis builds.
* Fixed negated queries in Django backend.
Previously negation did ``NOT (condition1 and condition2)`` vs expected
``NOT condition1 and NOT condition2``.
See `#53 <https://github.com/miki725/django-url-filter/issues/53>`_.
0.3.4 (2017-08-17)
~~~~~~~~~~~~~~~~~~
* Py36 compatibility by switching to ``enum-compat`` from ``enum34``
* Improvement to ``README`` by including imports in code examples
* Defaulting ``SQLAlchemyModelFilterSet`` to use ``SQLAlchemyFilterBackend``
* Defaulting ``PlainModelFilterSet`` to use ``PlainFilterBackend``
* Using universal wheels for distribution
0.3.3 (2017-06-15)
~~~~~~~~~~~~~~~~~~
* Fixed bug which did not allow to use SQLAlchemy backend fully
without having ``django.contrib.contenttypes`` in installed apps.
See `#36 <https://github.com/miki725/django-url-filter/issues/36>`_.
* Improved SQLAlchemy versions compatibility.
* Added ``URLFilterBackend`` alias in DRF integration for backend to reduce
confusion with ``DjangoFilterBackend`` as in url filter core backend.
0.3.2 (2017-05-19)
~~~~~~~~~~~~~~~~~~
* Fixed plain backend to return list in Python 3 vs ``filter()`` generator
which is not compatible with Django pagination since it requires ``len()``
to be implemented.
0.3.1 (2017-05-18)
~~~~~~~~~~~~~~~~~~
* Fixed bug where default filters were used in root filtersets.
As a result additional querystring parameters were validation which
broke other functionality such as pagination.
0.3.0 (2017-01-26)
~~~~~~~~~~~~~~~~~~
* Added plain objects filtering support.
More in `docs <https://django-url-filter.readthedocs.io/en/latest/usage.html#plain-filtering>`_
and GitHub issue `#8 <https://github.com/miki725/django-url-filter/issues/8>`_.
* Added `CallableFilter <https://django-url-filter.readthedocs.io/en/latest/api/url_filter.filters.html#url_filter.filters.CallableFilter>`_ which allows to implement custom filters.
* Normalizing to DRF's ``ValidationError`` when using ``StrictMode.Fail``
since filterset raises Django's ``ValidationError`` which caused 500 status code.
* Fixes ``ModelFilterSet`` automatic introspection to ignore ``GenericForeignKey``
since they dont have form fields associated with them.
See `#20 <https://github.com/miki725/django-url-filter/issues/20>`_.
* Releasing with `wheels <http://pythonwheels.com/>`_.
0.2.0 (2015-09-12)
~~~~~~~~~~~~~~~~~~
* Added `SQLAlchemy <http://www.sqlalchemy.org/>`_ support.
* ``FilterSet`` instances have much more useful ``__repr__`` which
shows all filters at a glance. For example::
>>> PlaceFilterSet()
PlaceFilterSet()
address = Filter(form_field=CharField, lookups=ALL, default_lookup="exact", is_default=False)
id = Filter(form_field=IntegerField, lookups=ALL, default_lookup="exact", is_default=True)
name = Filter(form_field=CharField, lookups=ALL, default_lookup="exact", is_default=False)
restaurant = RestaurantFilterSet()
serves_hot_dogs = Filter(form_field=BooleanField, lookups=ALL, default_lookup="exact", is_default=False)
serves_pizza = Filter(form_field=BooleanField, lookups=ALL, default_lookup="exact", is_default=False)
waiter = WaiterFilterSet()
id = Filter(form_field=IntegerField, lookups=ALL, default_lookup="exact", is_default=True)
name = Filter(form_field=CharField, lookups=ALL, default_lookup="exact", is_default=False)
0.1.1 (2015-09-06)
~~~~~~~~~~~~~~~~~~
* Fixed installation issue where not all subpackages were installed.
0.1.0 (2015-08-30)
~~~~~~~~~~~~~~~~~~
* First release on PyPI.
Credits
-------
Development Lead
----------------
* Miroslav Shubernetskiy - https://github.com/miki725
Contributors
------------
* João Neto - https://github.com/netjinho
* Jorik Kraaikamp - https://github.com/JostCrow
* Håken Lid - https://github.com/haakenlid
* Ryan O’Hara - https://github.com/ryan-copperleaf
* webrunners - https://github.com/webrunners
* Simone Pellizzari - https://github.com/simone6021
* Jonathon Farzanfar - https://github.com/pctSW1
License
-------
::
The MIT License (MIT)
Copyright (c) 2015, Miroslav Shubernetskiy
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Raw data
{
"_id": null,
"home_page": "https://github.com/miki725/django-url-filter",
"name": "django-url-filter",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "django django-rest-framework",
"author": "Miroslav Shubernetskiy",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/9a/dd/e811d1001810638f87173373dff5d7a5f599007e00a436315d953f9f579b/django-url-filter-0.3.15.tar.gz",
"platform": "",
"description": "=================\nDjango URL Filter\n=================\n\n.. image:: https://badge.fury.io/py/django-url-filter.svg\n :target: http://badge.fury.io/py/django-url-filter\n.. image:: https://readthedocs.org/projects/django-url-filter/badge/?version=latest\n :target: http://django-url-filter.readthedocs.io/en/latest/?badge=latest\n.. image:: https://drone.miki725.com/api/badges/miki725/django-url-filter/status.svg\n :target: https://drone.miki725.com/miki725/django-url-filter\n.. image:: https://codecov.io/gh/miki725/django-url-filter/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/miki725/django-url-filter\n\nDjango URL Filter provides a safe way to filter data via human-friendly URLs.\n\n* Free software: MIT license\n* GitHub: https://github.com/miki725/django-url-filter\n* Documentation: http://django-url-filter.readthedocs.io/\n\nOverview\n--------\n\nThe main goal of Django URL Filter is to provide an easy URL interface\nfor filtering data. It allows the user to safely filter by model\nattributes and also allows to specify the lookup type for each filter\n(very much like Django's filtering system in ORM).\n\nFor example the following will retrieve all items where the id is\n``5`` and title contains ``\"foo\"``::\n\n example.com/listview/?id=5&title__contains=foo\n\nIn addition to basic lookup types, Django URL Filter allows to\nuse more sophisticated lookups such as ``in`` or ``year``.\nFor example::\n\n example.com/listview/?id__in=1,2,3&created__year=2013\n\nRequirements\n------------\n\n* Python 2.7, 3.x, pypy or pypy3\n* Django 1.8+ (there are plans to support older Django versions)\n* Django REST Framework 2 or 3 (only if you want to use DRF integration)\n\nInstalling\n----------\n\nEasiest way to install this library is by using ``pip``::\n\n $ pip install django-url-filter\n\nUsage Example\n-------------\n\nTo make example short, it demonstrates Django URL Filter integration\nwith Django REST Framework but it can be used without DRF (see below).\n\n::\n\n from url_filter.integrations.drf import DjangoFilterBackend\n\n\n class UserViewSet(ModelViewSet):\n queryset = User.objects.all()\n serializer_class = UserSerializer\n filter_backends = [DjangoFilterBackend]\n filter_fields = ['username', 'email']\n\nAlternatively filterset can be manually created and used directly\nto filter querysets::\n\n from django.http import QueryDict\n from url_filter.filtersets import ModelFilterSet\n\n\n class UserFilterSet(ModelFilterSet):\n class Meta(object):\n model = User\n\n query = QueryDict('email__contains=gmail&joined__gt=2015-01-01')\n fs = UserFilterSet(data=query, queryset=User.objects.all())\n filtered_users = fs.filter()\n\nAbove will automatically allow the use of all of the Django URL Filter features.\nSome possibilities::\n\n # get user with id 5\n example.com/users/?id=5\n\n # get user with id either 5, 10 or 15\n example.com/users/?id__in=5,10,15\n\n # get user with id between 5 and 10\n example.com/users/?id__range=5,10\n\n # get user with username \"foo\"\n example.com/users/?username=foo\n\n # get user with username containing case insensitive \"foo\"\n example.com/users/?username__icontains=foo\n\n # get user where username does NOT contain \"foo\"\n example.com/users/?username__icontains!=foo\n\n # get user who joined in 2015 as per user profile\n example.com/users/?profile__joined__year=2015\n\n # get user who joined in between 2010 and 2015 as per user profile\n example.com/users/?profile__joined__range=2010-01-01,2015-12-31\n\n # get user who joined in after 2010 as per user profile\n example.com/users/?profile__joined__gt=2010-01-01\n\nFeatures\n--------\n\n* **Human-friendly URLs**\n\n Filter querystring format looks\n very similar to syntax for filtering in Django ORM.\n Even negated filters are supported! Some examples::\n\n example.com/users/?email__contains=gmail&joined__gt=2015-01-01\n example.com/users/?email__contains!=gmail # note !\n\n* **Related models**\n\n Support related fields so that filtering can be applied to related\n models. For example::\n\n example.com/users/?profile__nickname=foo\n\n* **Decoupled filtering**\n\n How URLs are parsed and how data is filtered is decoupled.\n This allows the actual filtering logic to be decoupled from Django\n hence filtering is possible not only with Django ORM QuerySet but\n any set of data can be filtered (e.g. SQLAlchemy query objects)\n assuming corresponding filtering backend is implemented.\n\n* **Usage-agnostic**\n\n This library decouples filtering from any particular usage-pattern.\n It implements all the basic building blocks for creating\n filtersets but it does not assume how they will be used.\n To make the library easy to use, it ships with some integrations\n with common usage patterns like integration with Django REST Framework.\n This means that its easy to use in custom applications with custom\n requirements (which is probably most of the time!)\n\n\n\n\nHistory\n-------\n\n0.3.15 (2020-02-10)\n~~~~~~~~~~~~~~~~~~~\n\n* Fixes ``date`` lookup when using Django ORM.\n See `#92 <https://github.com/miki725/django-url-filter/issues/92>`_.\n\n0.3.14 (2019-10-30)\n~~~~~~~~~~~~~~~~~~~\n\n* Using ``CharField`` for ``regex`` filters.\n See `#90 <https://github.com/miki725/django-url-filter/pull/90>`_.\n* ``SQLAlchemyFilterBackend`` does not join models if already join path\n is partially joined already.\n* ``SQLAlchemyFilterBackend`` joins when ``selectinjoin`` is used.\n\n0.3.13 (2019-07-28)\n~~~~~~~~~~~~~~~~~~~\n\n* Fixing `iregex` documentation in DRF coreapi integration.\n\n0.3.12 (2019-01-24)\n~~~~~~~~~~~~~~~~~~~\n\n* Adding support for ``FilterSet.Meta.fields == '__all__'`` which is useful in DRF integration.\n See `#39 <https://github.com/miki725/django-url-filter/pull/39>`_.\n\n0.3.11 (2018-12-06)\n~~~~~~~~~~~~~~~~~~~\n\n* Not modifying queryset in Django backend if no filters were applied.\n See `#73 <https://github.com/miki725/django-url-filter/pull/73>`_.\n\n0.3.10 (2018-11-14)\n~~~~~~~~~~~~~~~~~~~\n\n* Only running ``distinct`` on queryset when one of filters is on one-to-many relation.\n This should help with performance.\n See `#26 <https://github.com/miki725/django-url-filter/issues/26>`_.\n\n0.3.9 (2018-11-12)\n~~~~~~~~~~~~~~~~~~\n\n* Adding ``iin`` form field overwrite for SQLAlchemy as otherwise by default\n ``iin`` lookup is not validated correctly.\n\n0.3.8 (2018-08-08)\n~~~~~~~~~~~~~~~~~~\n\n* Fixed ``SQLAlchemyFilterBackend`` by not joining nested models\n when they are already eager loaded via ``query.options()``.\n\n0.3.7 (2018-07-27)\n~~~~~~~~~~~~~~~~~~\n\n* Added ``StrictModel.empty`` which is new default.\n It returns empty queryset when any filter validations fail.\n* Fixed ``in`` lookup. Previously if any of the items were invalid\n whole filter would fail and depending on strict mode would\n either return all results, no results or will raise exception.\n Now in ``StrictMode.empty`` and ``StrictMode.drop`` any invalid\n items are ignored which will filter results for valid items.\n See `#63 <https://github.com/miki725/django-url-filter/issues/64>`_.\n* Added ability in ``ModelFilterSet`` to customize filter names\n by providing ``extra_kwargs`` with field ``source``.\n See `#66 <https://github.com/miki725/django-url-filter/issues/66>`_.\n\n0.3.6 (2018-07-23)\n~~~~~~~~~~~~~~~~~~\n\n* Added support for ``extra_kwargs`` in ``ModelFilterSet.Meta``.\n* Added ``CoreAPIURLFilterBackend`` which enables documented filters in swagger docs.\n* Added ``iin`` lookup in plain and sqlalchemy backends.\n* Fixing inconsistency between plain and Django ``week_day`` lookup.\n Now both are consistent with ``1``-Monday and ``7``-Sunday.\n\n0.3.5 (2018-02-27)\n~~~~~~~~~~~~~~~~~~\n\n* Django 2 support.\n* Using `tox-travis <https://github.com/tox-dev/tox-travis>`_ for travis builds.\n* Fixed negated queries in Django backend.\n Previously negation did ``NOT (condition1 and condition2)`` vs expected\n ``NOT condition1 and NOT condition2``.\n See `#53 <https://github.com/miki725/django-url-filter/issues/53>`_.\n\n0.3.4 (2017-08-17)\n~~~~~~~~~~~~~~~~~~\n\n* Py36 compatibility by switching to ``enum-compat`` from ``enum34``\n* Improvement to ``README`` by including imports in code examples\n* Defaulting ``SQLAlchemyModelFilterSet`` to use ``SQLAlchemyFilterBackend``\n* Defaulting ``PlainModelFilterSet`` to use ``PlainFilterBackend``\n* Using universal wheels for distribution\n\n0.3.3 (2017-06-15)\n~~~~~~~~~~~~~~~~~~\n\n* Fixed bug which did not allow to use SQLAlchemy backend fully\n without having ``django.contrib.contenttypes`` in installed apps.\n See `#36 <https://github.com/miki725/django-url-filter/issues/36>`_.\n* Improved SQLAlchemy versions compatibility.\n* Added ``URLFilterBackend`` alias in DRF integration for backend to reduce\n confusion with ``DjangoFilterBackend`` as in url filter core backend.\n\n0.3.2 (2017-05-19)\n~~~~~~~~~~~~~~~~~~\n\n* Fixed plain backend to return list in Python 3 vs ``filter()`` generator\n which is not compatible with Django pagination since it requires ``len()``\n to be implemented.\n\n0.3.1 (2017-05-18)\n~~~~~~~~~~~~~~~~~~\n\n* Fixed bug where default filters were used in root filtersets.\n As a result additional querystring parameters were validation which\n broke other functionality such as pagination.\n\n0.3.0 (2017-01-26)\n~~~~~~~~~~~~~~~~~~\n\n* Added plain objects filtering support.\n More in `docs <https://django-url-filter.readthedocs.io/en/latest/usage.html#plain-filtering>`_\n and GitHub issue `#8 <https://github.com/miki725/django-url-filter/issues/8>`_.\n* Added `CallableFilter <https://django-url-filter.readthedocs.io/en/latest/api/url_filter.filters.html#url_filter.filters.CallableFilter>`_ which allows to implement custom filters.\n* Normalizing to DRF's ``ValidationError`` when using ``StrictMode.Fail``\n since filterset raises Django's ``ValidationError`` which caused 500 status code.\n* Fixes ``ModelFilterSet`` automatic introspection to ignore ``GenericForeignKey``\n since they dont have form fields associated with them.\n See `#20 <https://github.com/miki725/django-url-filter/issues/20>`_.\n* Releasing with `wheels <http://pythonwheels.com/>`_.\n\n0.2.0 (2015-09-12)\n~~~~~~~~~~~~~~~~~~\n\n* Added `SQLAlchemy <http://www.sqlalchemy.org/>`_ support.\n* ``FilterSet`` instances have much more useful ``__repr__`` which\n shows all filters at a glance. For example::\n\n >>> PlaceFilterSet()\n PlaceFilterSet()\n address = Filter(form_field=CharField, lookups=ALL, default_lookup=\"exact\", is_default=False)\n id = Filter(form_field=IntegerField, lookups=ALL, default_lookup=\"exact\", is_default=True)\n name = Filter(form_field=CharField, lookups=ALL, default_lookup=\"exact\", is_default=False)\n restaurant = RestaurantFilterSet()\n serves_hot_dogs = Filter(form_field=BooleanField, lookups=ALL, default_lookup=\"exact\", is_default=False)\n serves_pizza = Filter(form_field=BooleanField, lookups=ALL, default_lookup=\"exact\", is_default=False)\n waiter = WaiterFilterSet()\n id = Filter(form_field=IntegerField, lookups=ALL, default_lookup=\"exact\", is_default=True)\n name = Filter(form_field=CharField, lookups=ALL, default_lookup=\"exact\", is_default=False)\n\n0.1.1 (2015-09-06)\n~~~~~~~~~~~~~~~~~~\n\n* Fixed installation issue where not all subpackages were installed.\n\n0.1.0 (2015-08-30)\n~~~~~~~~~~~~~~~~~~\n\n* First release on PyPI.\n\n\nCredits\n-------\n\nDevelopment Lead\n----------------\n\n* Miroslav Shubernetskiy - https://github.com/miki725\n\nContributors\n------------\n\n* Jo\u00e3o Neto - https://github.com/netjinho\n* Jorik Kraaikamp - https://github.com/JostCrow\n* H\u00e5ken Lid - https://github.com/haakenlid\n* Ryan O\u2019Hara - https://github.com/ryan-copperleaf\n* webrunners - https://github.com/webrunners\n* Simone Pellizzari - https://github.com/simone6021\n* Jonathon Farzanfar - https://github.com/pctSW1\n\n\nLicense\n-------\n\n::\n\n The MIT License (MIT)\n\n Copyright (c) 2015, Miroslav Shubernetskiy\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Django URL Filter provides a safe way to filter data via human-friendly URLs.",
"version": "0.3.15",
"project_urls": {
"Homepage": "https://github.com/miki725/django-url-filter"
},
"split_keywords": [
"django",
"django-rest-framework"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "35808d2a6688fdefc10033b7d7abf63bef3f804e4e317bbc823cc6fde3f5d475",
"md5": "c1ca51e196726e864f53f2171aa2588f",
"sha256": "fdc882d45c72546d07657ef1074ad7a5490807d990b1618eae1873bfd0b4c4d1"
},
"downloads": -1,
"filename": "django_url_filter-0.3.15-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "c1ca51e196726e864f53f2171aa2588f",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 39938,
"upload_time": "2020-02-10T13:35:58",
"upload_time_iso_8601": "2020-02-10T13:35:58.108978Z",
"url": "https://files.pythonhosted.org/packages/35/80/8d2a6688fdefc10033b7d7abf63bef3f804e4e317bbc823cc6fde3f5d475/django_url_filter-0.3.15-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9adde811d1001810638f87173373dff5d7a5f599007e00a436315d953f9f579b",
"md5": "6755fa26dcb3a999746bd535dbf28ee9",
"sha256": "12d66e4ff0150e10fd4efd1ec292a06a2cec6311ec2e4bd1fc99b2fea18e2a7b"
},
"downloads": -1,
"filename": "django-url-filter-0.3.15.tar.gz",
"has_sig": false,
"md5_digest": "6755fa26dcb3a999746bd535dbf28ee9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 43773,
"upload_time": "2020-02-10T13:35:59",
"upload_time_iso_8601": "2020-02-10T13:35:59.427309Z",
"url": "https://files.pythonhosted.org/packages/9a/dd/e811d1001810638f87173373dff5d7a5f599007e00a436315d953f9f579b/django-url-filter-0.3.15.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2020-02-10 13:35:59",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "miki725",
"github_project": "django-url-filter",
"travis_ci": true,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "cached-property",
"specs": []
},
{
"name": "Django",
"specs": [
[
">=",
"1.8"
]
]
},
{
"name": "enum-compat",
"specs": []
},
{
"name": "six",
"specs": []
}
],
"tox": true,
"lcname": "django-url-filter"
}