# 61 Filter backend

* refactors XYTableFilter classes to hold query_filter and checkbox_filter which are separate instances of django_filter.FilterSets
* improves render ability for frontend
This commit is contained in:
2022-01-11 15:19:16 +01:00
parent 87f11a9914
commit 8a19d7239d
4 changed files with 110 additions and 30 deletions

View File

@@ -10,15 +10,11 @@ from django.utils.translation import gettext_lazy as _
from django import forms
from django.db.models import QuerySet
from konova.filters import AbstractTableFilter, GeoReferencedTableFilterMixin, ShareableTableFilterMixin, \
RecordableTableFilterMixin
from konova.filters import QueryTableFilter, CheckboxTableFilter
class CompensationTableFilter(AbstractTableFilter, GeoReferencedTableFilterMixin, ShareableTableFilterMixin, RecordableTableFilterMixin):
""" TableFilter for compensations
Based widely on InterventionTableFilter.
Just some minor changes for Compensation model.
class CheckboxCompensationTableFilter(CheckboxTableFilter):
""" Specialization of regular CheckboxTableFilter for compensation model
"""
@@ -59,12 +55,36 @@ class CompensationTableFilter(AbstractTableFilter, GeoReferencedTableFilterMixin
return queryset
class EcoAccountTableFilter(AbstractTableFilter, GeoReferencedTableFilterMixin, ShareableTableFilterMixin, RecordableTableFilterMixin):
""" TableFilter for eco accounts
class CompensationTableFilter:
""" TableFilter for compensations
Just some minor changes for EcoAccount model.
Based widely on InterventionTableFilter.
Just some minor changes for Compensation model.
"""
query_filter = None
checkbox_filter = None
qs = None
def __init__(self, *args, **kwargs):
user = kwargs.get("user", None)
qs = kwargs.get("queryset", None)
request_data = kwargs.get("data", None)
self.query_filter = QueryTableFilter(
user=user,
data=request_data,
queryset=qs,
)
self.checkbox_filter = CheckboxCompensationTableFilter(
user=user,
data=request_data,
queryset=self.query_filter.qs,
)
self.qs = self.checkbox_filter.qs
class CheckboxEcoAccountTableFilter(CheckboxTableFilter):
sr = django_filters.BooleanFilter(
method='filter_only_show_unrecorded',
label=_("Show only unrecorded"),
@@ -107,3 +127,29 @@ class EcoAccountTableFilter(AbstractTableFilter, GeoReferencedTableFilterMixin,
)
else:
return queryset
class EcoAccountTableFilter:
""" TableFilter for eco accounts
"""
query_filter = None
checkbox_filter = None
qs = None
def __init__(self, *args, **kwargs):
user = kwargs.get("user", None)
qs = kwargs.get("queryset", None)
request_data = kwargs.get("data", None)
self.query_filter = QueryTableFilter(
user=user,
data=request_data,
queryset=qs,
)
self.checkbox_filter = CheckboxEcoAccountTableFilter(
user=user,
data=request_data,
queryset=self.query_filter.qs,
)
self.qs = self.checkbox_filter.qs