|
1 | | -import datetime |
2 | 1 | from django.contrib.auth import get_user_model |
3 | 2 | from django.db.models import Q |
4 | 3 | from django_filters import rest_framework as filters |
5 | 4 |
|
6 | 5 | from partner_programs.models import PartnerProgram, PartnerProgramUserProfile |
| 6 | +from users.utils import filter_age |
7 | 7 |
|
8 | 8 | User = get_user_model() |
| 9 | +MIN_AGE_VALUE = 0 |
| 10 | +MAX_AGE_VALUE = 1000 |
9 | 11 |
|
10 | 12 |
|
11 | 13 | class UserFilter(filters.FilterSet): |
@@ -45,19 +47,12 @@ def filter_by_partner_program(cls, queryset, name, value): |
45 | 47 | return User.objects.none() |
46 | 48 |
|
47 | 49 | @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 | | - ) |
| 50 | + def filter_age__gte(cls, queryset, name, value): |
| 51 | + return filter_age(queryset, value, MAX_AGE_VALUE) |
| 52 | + |
| 53 | + @classmethod |
| 54 | + def filter_age__lte(cls, queryset, name, value): |
| 55 | + return filter_age(queryset, MIN_AGE_VALUE, value) |
61 | 56 |
|
62 | 57 | @classmethod |
63 | 58 | def filter_by_fullname(cls, queryset, name, value): |
@@ -93,7 +88,8 @@ def filter_by_fullname(cls, queryset, name, value): |
93 | 88 | ) |
94 | 89 | fullname = filters.CharFilter(method="filter_by_fullname") |
95 | 90 |
|
96 | | - age = filters.Filter(field_name="age", method="filter_age") |
| 91 | + age__gte = filters.Filter(method="filter_age__gte") |
| 92 | + age__lte = filters.Filter(method="filter_age__lte") |
97 | 93 |
|
98 | 94 | class Meta: |
99 | 95 | model = User |
|
0 commit comments