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", + ]