Metadata-Version: 2.1
Name: drf-complex-filter
Version: 0.1.2
Summary: DRF filter for complex queries.
Home-page: https://github.com/kit-oz/drf-complex-filter
Author: Nikita Balobanov
Author-email: kit-oz@ya.ru
License: MIT
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.6
Requires-Dist: djangorestframework

====================================
Django Rest Framework Complex Filter
====================================

DRF filter for complex queries

Installing
----------

For installing use ``pip``

::

    $ pip install drf-complex-filter

Usage
-----

Add ``ComplexQueryFilter`` to ``filter_backends``:

::

  from drf_complex_filter.filters import ComplexQueryFilter


  class UserViewSet(ModelViewSet):
      queryset = User.objects.all()
      serializer_class = UserSerializer
      filter_backends = [ComplexQueryFilter]



And get some records

::

  GET /users?filters={"type":"operator","data":{"attribute":"first_name","operator":"=","value":"John"}}

Filter operator
---------------

Operator may be one of three types

::

  {
    "type": "operator",
    "data": {
      "attribute": "field_name",
      "operator": "one_of_lookup_operators",
      "value": "value_for_compare",
    }
  }


::

  {
    "type": "and",
    "data": []
  }


::

  {
    "type": "or",
    "data": []
  }




Lookup operators
----------------

=============================  ==============
Operator label                 Query operator
=============================  ==============
Is                             =
Is not                         !=
Greater                        >
Greater than or is             >=
Less                           <
Less than or is                <=
Case-insensitive contains      \*
Case-insensitive not contains  !
Case-sensitive contains        cnt
Case-sensitive not contains    ncnt
=============================  ==============



