|
| 1 | +import datetime |
1 | 2 | from django.contrib.auth import get_user_model |
2 | 3 | from django.db.models import Q |
3 | 4 | from django_filters import rest_framework as filters |
@@ -43,6 +44,21 @@ def filter_by_partner_program(cls, queryset, name, value): |
43 | 44 | except PartnerProgram.DoesNotExist: |
44 | 45 | return User.objects.none() |
45 | 46 |
|
| 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 | + |
46 | 62 | @classmethod |
47 | 63 | def filter_by_fullname(cls, queryset, name, value): |
48 | 64 | words = value.split() |
@@ -77,8 +93,7 @@ def filter_by_fullname(cls, queryset, name, value): |
77 | 93 | ) |
78 | 94 | fullname = filters.CharFilter(method="filter_by_fullname") |
79 | 95 |
|
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") |
82 | 97 |
|
83 | 98 | class Meta: |
84 | 99 | model = User |
|
0 commit comments