Skip to content

Commit 0fd1775

Browse files
authored
Merge pull request #190 from PROCOLLAB-github/feature/users-filter
Фильтр пользователей по их полному имени (имя + фамилия)
2 parents 7c24ca1 + b4e4828 commit 0fd1775

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

users/filters.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from django.contrib.auth import get_user_model
2+
from django.db.models import Q
23
from django_filters import rest_framework as filters
34

45
from 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

Comments
 (0)