11from django .contrib .auth import get_user_model
2+ from django .db .models import Q
23from django_filters import rest_framework as filters
34
45from partner_programs .models import PartnerProgram , PartnerProgramUserProfile
@@ -42,6 +43,24 @@ def filter_by_partner_program(cls, queryset, name, value):
4243 except PartnerProgram .DoesNotExist :
4344 return User .objects .none ()
4445
46+ @classmethod
47+ def filter_by_fullname (cls , queryset , name , value ):
48+ words = value .split ()
49+ first_word = words [0 ]
50+ if len (words ) >= 2 :
51+ # if there are more than 2 words, we assume that the first two are first_name and last_name
52+ first_word , second_word = words [0 ], words [1 ]
53+ # we search for both first_name and last_name in both orders
54+ return queryset .filter (
55+ Q (first_name__icontains = first_word )
56+ | Q (last_name__icontains = second_word )
57+ | Q (first_name__icontains = second_word )
58+ | Q (last_name__icontains = first_word )
59+ )
60+ return queryset .filter (
61+ Q (first_name__icontains = first_word ) | Q (last_name__icontains = first_word )
62+ )
63+
4564 about_me__contains = filters .Filter (field_name = "about_me" , lookup_expr = "contains" )
4665 key_skills__contains = filters .Filter (field_name = "key_skills" , lookup_expr = "contains" )
4766 useful_to_project__contains = filters .Filter (
@@ -51,6 +70,7 @@ def filter_by_partner_program(cls, queryset, name, value):
5170 partner_program = filters .NumberFilter (
5271 field_name = "partner_program" , method = "filter_by_partner_program"
5372 )
73+ fullname = filters .CharFilter (method = "filter_by_fullname" )
5474
5575 class Meta :
5676 model = User
0 commit comments