mirror of https://github.com/interlegis/sapl.git
3 changed files with 63 additions and 48 deletions
@ -0,0 +1,56 @@ |
|||||
|
from django.db.models.fields import CharField |
||||
|
from django.db.models.fields.files import FileField |
||||
|
from django.template.defaultfilters import capfirst |
||||
|
import django_filters |
||||
|
from django_filters.filters import CharFilter |
||||
|
from django_filters.rest_framework.filterset import FilterSet |
||||
|
from django_filters.utils import resolve_field |
||||
|
|
||||
|
|
||||
|
class SaplFilterSetMixin(FilterSet): |
||||
|
|
||||
|
o = CharFilter(method='filter_o') |
||||
|
|
||||
|
class Meta: |
||||
|
fields = '__all__' |
||||
|
filter_overrides = { |
||||
|
CharField: { |
||||
|
'filter_class': django_filters.CharFilter, |
||||
|
'extra': lambda f: { |
||||
|
'lookup_expr': ['exact', 'icontains'] |
||||
|
} |
||||
|
}, |
||||
|
FileField: { |
||||
|
'filter_class': django_filters.CharFilter, |
||||
|
'extra': lambda f: { |
||||
|
'lookup_expr': 'exact', |
||||
|
}, |
||||
|
}, |
||||
|
} |
||||
|
|
||||
|
def filter_o(self, queryset, name, value): |
||||
|
try: |
||||
|
return queryset.order_by( |
||||
|
*map(str.strip, value.split(','))) |
||||
|
except: |
||||
|
return queryset |
||||
|
|
||||
|
@classmethod |
||||
|
def filter_for_field(cls, f, name, lookup_expr='exact'): |
||||
|
# Redefine método estático para ignorar filtro para |
||||
|
# fields que não possuam lookup_expr informado |
||||
|
|
||||
|
f, lookup_type = resolve_field(f, lookup_expr) |
||||
|
|
||||
|
default = { |
||||
|
'field_name': name, |
||||
|
'label': capfirst(f.verbose_name), |
||||
|
'lookup_expr': lookup_expr |
||||
|
} |
||||
|
|
||||
|
filter_class, params = cls.filter_for_lookup( |
||||
|
f, lookup_type) |
||||
|
default.update(params) |
||||
|
if filter_class is not None: |
||||
|
return filter_class(**default) |
||||
|
return None |
||||
Loading…
Reference in new issue