diff --git a/api/__pycache__/settings.cpython-313.pyc b/api/__pycache__/settings.cpython-313.pyc index 03cc6ad9..2274696f 100644 Binary files a/api/__pycache__/settings.cpython-313.pyc and b/api/__pycache__/settings.cpython-313.pyc differ diff --git a/app/__pycache__/cleardata.cpython-313.pyc b/app/__pycache__/cleardata.cpython-313.pyc index 8cbd5637..10b9a35c 100644 Binary files a/app/__pycache__/cleardata.cpython-313.pyc and b/app/__pycache__/cleardata.cpython-313.pyc differ diff --git a/app/__pycache__/models.cpython-313.pyc b/app/__pycache__/models.cpython-313.pyc index e15b329c..f4a43330 100644 Binary files a/app/__pycache__/models.cpython-313.pyc and b/app/__pycache__/models.cpython-313.pyc differ diff --git a/app/__pycache__/views.cpython-313.pyc b/app/__pycache__/views.cpython-313.pyc index a17f7263..10f3acd6 100644 Binary files a/app/__pycache__/views.cpython-313.pyc and b/app/__pycache__/views.cpython-313.pyc differ diff --git a/app/cleardata.py b/app/cleardata.py index ca0a6245..36277ca5 100644 --- a/app/cleardata.py +++ b/app/cleardata.py @@ -29,6 +29,9 @@ def data_deletion(request): Contract.objects.all().delete() Product_Booked.objects.all().delete() Transaction_File.objects.all().delete() + Co_Ownership.objects.all().delete() + Transaction_Current.objects.all().delete() + Transaction_Discount.objects.all().delete() Payment_Schedule.objects.all().delete() Transaction_Detail.objects.all().delete() Transaction.objects.all().delete() diff --git a/app/views.py b/app/views.py index e26bbfe9..0b3ed68a 100644 --- a/app/views.py +++ b/app/views.py @@ -343,7 +343,24 @@ def data_list(request, name): need_serializer = True filter_list = Q() if filter_or != None: + field_map = {f.name: f for f in Model._meta.get_fields()} for key, value in ast.literal_eval(filter_or).items(): + lookup_parts = key.split('__') + base_field_name = lookup_parts[0] + + if base_field_name not in field_map: + continue + + field_obj = field_map[base_field_name] + + if field_obj.is_relation and len(lookup_parts) == 2 and lookup_parts[1] == 'icontains': + continue + + is_numeric = isinstance(field_obj, (aggregator.IntegerField, aggregator.DecimalField, aggregator.FloatField)) + is_date = isinstance(field_obj, (aggregator.DateField, aggregator.DateTimeField)) + if (is_numeric or is_date) and key.endswith('__icontains'): + continue + filter_list.add(Q(**{key: value}), Q.OR) if filter != None: