Skip to content

Commit 1d49084

Browse files
committed
age filter
1 parent 2bcee04 commit 1d49084

3 files changed

Lines changed: 36 additions & 11 deletions

File tree

poetry.lock

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

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ tablib = {extras = ["xlsx"], version = "^3.5.0"}
6363
django-redis = "^5.3.0"
6464
django-stubs = {extras = ["compatible-mypy"], version = "^4.2.6"}
6565
djangorestframework-stubs = {extras = ["compatible-mypy"], version = "^3.14.4"}
66+
python-dateutil = "^2.8.2"
6667

6768

6869
[build-system]

users/filters.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,13 @@ def filter_by_partner_program(cls, queryset, name, value):
4646
return User.objects.none()
4747

4848
@classmethod
49-
def filter_age__gte(cls, queryset, name, value):
50-
return queryset.filter(birthday__gte=datetime.datetime.now() - relativedelta(years=int(value)))
51-
52-
@classmethod
53-
def filter_age__lte(cls, queryset, name, value):
54-
return queryset.filter(birthday__lte=datetime.datetime.now() - relativedelta(years=int(value)))
49+
def filter_age(cls, queryset, name, value):
50+
start, stop = map(int, value.split(","))
51+
start, stop = min(start, stop), max(start, stop)
52+
return queryset.filter(
53+
Q(birthday__gte=datetime.datetime.now() - relativedelta(years=int(stop)))
54+
& Q(birthday__lte=datetime.datetime.now() - relativedelta(years=int(start)))
55+
)
5556

5657
@classmethod
5758
def filter_by_fullname(cls, queryset, name, value):
@@ -87,8 +88,7 @@ def filter_by_fullname(cls, queryset, name, value):
8788
)
8889
fullname = filters.CharFilter(method="filter_by_fullname")
8990

90-
age__gte = filters.NumberFilter(field_name="age", lookup_expr="gte")
91-
age__lte = filters.NumberFilter(field_name="age", lookup_expr="lte")
91+
age = filters.Filter(field_name="age", method="filter_age")
9292

9393
class Meta:
9494
model = User

0 commit comments

Comments
 (0)