Skip to content

Commit 31f6432

Browse files
authored
Merge pull request #247 from PROCOLLAB-github/afarut-patch-1
users > filters > create filter for age
2 parents bc6d202 + d4e1ceb commit 31f6432

2 files changed

Lines changed: 29 additions & 4 deletions

File tree

poetry.lock

Lines changed: 12 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

users/filters.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import datetime
12
from django.contrib.auth import get_user_model
23
from django.db.models import Q
34
from django_filters import rest_framework as filters
@@ -43,6 +44,21 @@ def filter_by_partner_program(cls, queryset, name, value):
4344
except PartnerProgram.DoesNotExist:
4445
return User.objects.none()
4546

47+
@classmethod
48+
def filter_age(cls, queryset, name, value):
49+
start, stop = map(int, value.split(","))
50+
start, stop = min(start, stop), max(start, stop)
51+
return queryset.filter(
52+
Q(
53+
birthday__gte=datetime.datetime.now()
54+
- datetime.timedelta(days=365.24 * int(stop))
55+
)
56+
& Q(
57+
birthday__lte=datetime.datetime.now()
58+
- datetime.timedelta(days=365.24 * int(start))
59+
)
60+
)
61+
4662
@classmethod
4763
def filter_by_fullname(cls, queryset, name, value):
4864
words = value.split()
@@ -77,8 +93,7 @@ def filter_by_fullname(cls, queryset, name, value):
7793
)
7894
fullname = filters.CharFilter(method="filter_by_fullname")
7995

80-
age__gte = filters.NumberFilter(field_name="age", lookup_expr="gte")
81-
age__lte = filters.NumberFilter(field_name="age", lookup_expr="lte")
96+
age = filters.Filter(field_name="age", method="filter_age")
8297

8398
class Meta:
8499
model = User

0 commit comments

Comments
 (0)