From e4a01597aa88e6e21f8cf6087af403fd863a14dc Mon Sep 17 00:00:00 2001 From: i701 Date: Thu, 3 Jul 2025 21:04:42 +0500 Subject: [PATCH] =?UTF-8?q?refactor(billing):=20Refactor=20TopupFilter=20t?= =?UTF-8?q?o=20enhance=20user=20search=20functionality=20and=20update=20fi?= =?UTF-8?q?elds=20=F0=9F=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- billing/filters.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/billing/filters.py b/billing/filters.py index c316e4f..97af140 100644 --- a/billing/filters.py +++ b/billing/filters.py @@ -1,5 +1,6 @@ import django_filters from .models import Payment, Topup +from django.db.models import Q class PaymentFilter(django_filters.FilterSet): @@ -21,11 +22,25 @@ class PaymentFilter(django_filters.FilterSet): class TopupFilter(django_filters.FilterSet): amount = django_filters.RangeFilter(field_name="amount") paid = django_filters.BooleanFilter(field_name="paid") - user = django_filters.CharFilter( - field_name="user__username", lookup_expr="icontains" - ) - created_at = django_filters.DateFromToRangeFilter() + user = django_filters.CharFilter(method="filter_user_search") + created_at = django_filters.DateFromToRangeFilter(field_name="created_at") + + def filter_user_search(self, queryset, name, value): + """ + Search across multiple user fields: first_name, last_name, id_card, mobile + """ + return queryset.filter( + Q(user__first_name__icontains=value) + | Q(user__last_name__icontains=value) + | Q(user__id_card__icontains=value) + | Q(user__mobile__icontains=value) + ) class Meta: model = Topup # Assuming Topup is a subclass of Payment - fields = "__all__" + fields = [ + "amount", + "paid", + "user", + "created_at", + ]