A package for filter all models in django based on query parameters.
Installation:
pip3 install django_rest_framework
pip3 install rest_filter_qp
if you use jalali date:
pip3 install jalali_date
query parameters:
https://example.com/[URL]/?filters[]=[{"key":"KEY1","value":"VALUE1","type":"TYPE"},{"key":"KEY2","value":"VALUE2",,"type":"TYPE"},...]
key : model field name
type : type of filters, you should write a type from these :
FILTER_TYPES = {
'max':{ # max of a field
'type' : 'int',
'len' : 1,
'extra_keys':[],
'method' : Max,
'is_aggregate':True
},
'min':{ # min of a field
'type' : 'int',
'len' : 1,
'extra_keys':[],
'method' : Min,
'is_aggregate':True
},
'bwn':{ # field between 2 value
'type' : 'list',
'len' : 2,
'extra_keys':['gte','lte'],
'method' : None,
'is_aggregate':False
},
'normal':{ # field equal a value
'type' : None,
'len' : 1,
'extra_keys':[],
'method' : None,
'is_aggregate':False
},
'today':{ # objects that created today
'type' : 'list',
'len' : 1,
'extra_keys' : ['year','month','day'],
'method' : this_day,
'is_aggregate':False
},
'toweek' : { # objects that created current week (based jalali date)
'type':'rang',
'len' : 1,
'extra_keys' : ['range'],
'method' : this_week,
'is_aggregate':False
},
'tomonth' : { # objects that created current month
'type' : 'list',
'len' : 1,
'extra_keys' : ['year','month'],
'method' : this_month,
'is_aggregate':False
},
'asc' : { # order asc
'type' : 'sort',
'len' : 1,
'extra_keys' : [],
'method' : None,
'is_aggregate' : False
},
'desc' : { # order desc
'type' : 'sort',
'len' : 1,
'extra_keys' : [],
'method' : None,
'is_aggregate' : False
}
}
for example, you have a model like this :
class Product(models.Model):
title = models.CharField(max_length=255)
by_count = models.IntegerField(default=0)
view_count = models.IntegerField(default=0)
slug = models.SlugField(max_length=255,unique=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
you should add FilterParams class from rest_filter_qp to your filter_backends[]:
from rest_filter_qp import FilterParams
class ProductView(generics.ListAPIView):
queryset = Product.objects.all()
serializer_class = ProductSerializer
filter_backends = [FilterParams]
now, you want filter product model by title field that value is "Foo" and created today ::
[YOUR_DOMAIN]/products/?filters[]=[{"key":"title","value":"Foo","type":"normal"},{"key":"created_at","value":"","type":"today"}]
if you want a objects with maximum value :
[YOUR_DOMAIN]/products/?filters[]=[{"key":"view_count","value":"","type":"max"}]
Release files for rest-filter-qp 1.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rest-filter-qp-1.2.1.tar.gz | 4.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rest_filter_qp-1.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.7 kB
Release files / rest-filter-qp-1.2.1.tar.gz
| Download URL | rest-filter-qp-1.2.1.tar.gz |
|---|---|
| Size | 4.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
518b96ecca7e1a1feb343b55bec2a1425dc55155fd9a2d83ebce960951d5df65
|
|
BLAKE2b-256 checksum How to use checksums |
e6b6fe18c69088075bfa65c295ed19f214ee0ba07cbc2a1366aa4bf5f39dfdbe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.5
|
Release files / rest_filter_qp-1.2.1-py3-none-any.whl
| Download URL | rest_filter_qp-1.2.1-py3-none-any.whl |
|---|---|
| Size | 5.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dcda12fcb2c6dfbedab5e04a9202b8eb55fd25f5f70fffba5b6fde0f083210ac
|
|
BLAKE2b-256 checksum How to use checksums |
5b32e73e9106b050d420c6d22c6d4f2466bf35cb021038870291146bc6bff393
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.5
|