From 708d7c2becd1a6c8affabd317640b13bfb7ca3b2 Mon Sep 17 00:00:00 2001 From: i701 Date: Mon, 30 Jun 2025 22:40:13 +0500 Subject: [PATCH] =?UTF-8?q?refactor(filters):=20Enhance=20user=20filtering?= =?UTF-8?q?=20in=20DeviceFilter=20to=20search=20across=20multiple=20user?= =?UTF-8?q?=20fields=20=F0=9F=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- devices/filters.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/devices/filters.py b/devices/filters.py index ad7ea80..702f65c 100644 --- a/devices/filters.py +++ b/devices/filters.py @@ -1,14 +1,24 @@ import django_filters from .models import Device +from django.db.models import Q class DeviceFilter(django_filters.FilterSet): name = django_filters.CharFilter(lookup_expr="icontains") mac = django_filters.CharFilter(lookup_expr="icontains") vendor = django_filters.CharFilter(lookup_expr="icontains") - user = django_filters.CharFilter( - field_name="user__last_name", lookup_expr="icontains" - ) + user = django_filters.CharFilter(method="filter_user_search") + + 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 = Device