diff --git a/allianceauth/framework/datatables.py b/allianceauth/framework/datatables.py index 0cf2ab66..38d5c165 100644 --- a/allianceauth/framework/datatables.py +++ b/allianceauth/framework/datatables.py @@ -60,18 +60,35 @@ class DataTablesView(View): _logic = str(c["columnControl"]["search"]["logic"]) """text, date, num""" _type = str(c["columnControl"]["search"]["type"]) - if _logic == "empty": - filter_qs &= Q(**{f'{_c}': ""}) - elif len(_sv) > 0: - if _logic == "contains": - filter_qs &= Q(**{f'{_c}__icontains': _sv}) - elif _logic == "starts": - filter_qs &= Q(**{f'{_c}__istartswith': _sv}) - elif _logic == "ends": - filter_qs &= Q(**{f'{_c}__iendswith': _sv}) - elif _logic == "equal": - filter_qs &= Q(**{f'{_c}': _sv}) - + if _type == "text": + if _logic == "empty": + filter_qs &= Q(**{f'{_c}': ""}) + elif len(_sv) > 0: + if _logic == "contains": + filter_qs &= Q(**{f'{_c}__icontains': _sv}) + elif _logic == "starts": + filter_qs &= Q(**{f'{_c}__istartswith': _sv}) + elif _logic == "ends": + filter_qs &= Q(**{f'{_c}__iendswith': _sv}) + elif _logic == "equal": + filter_qs &= Q(**{f'{_c}': _sv}) + elif _type == "num": + if _logic == "empty": + filter_qs &= Q(**{f'{_c}__isnull': True}) + elif len(_sv) > 0: + try: + if _logic == "greater": + filter_qs &= Q(**{f'{_c}__gt': float(_sv)}) + elif _logic == "less": + filter_qs &= Q(**{f'{_c}__lt': float(_sv)}) + elif _logic == "greaterOrEqual": + filter_qs &= Q(**{f'{_c}__gte': float(_sv)}) + elif _logic == "lessOrEqual": + filter_qs &= Q(**{f'{_c}__lte': float(_sv)}) + elif _logic == "equal": + filter_qs &= Q(**{f'{_c}': float(_sv)}) + except ValueError: + pass else: _sv = str(c["search"]["value"]) if len(_sv) > 0: @@ -96,14 +113,23 @@ class DataTablesView(View): _logic = str(c["columnControl"]["search"]["logic"]) """text, date, num""" _type = str(c["columnControl"]["search"]["type"]) - if _logic == "notEmpty": - except_qs |= Q(**{f'{_c}': ""}) - elif len(_sv) > 0: - if _logic == "notContains": - except_qs |= Q(**{f'{_c}__icontains': _sv}) - elif _logic == "notEqual": - except_qs |= Q(**{f'{_c}': _sv}) - + if _type == "text": + if _logic == "notEmpty": + except_qs |= Q(**{f'{_c}': ""}) + elif len(_sv) > 0: + if _logic == "notContains": + except_qs |= Q(**{f'{_c}__icontains': _sv}) + elif _logic == "notEqual": + except_qs |= Q(**{f'{_c}': _sv}) + elif _type == "num": + if _logic == "notEmpty": + except_qs |= Q(**{f'{_c}__isnull': False}) + elif len(_sv) > 0: + if _logic == "notEqual": + try: + except_qs |= Q(**{f'{_c}': float(_sv)}) + except ValueError: + pass return except_qs def get_table_config(self, get: dict):