Created
November 25, 2023 17:01
-
-
Save piraka9011/c43e78a1d22651cbf10ea0856a1d6208 to your computer and use it in GitHub Desktop.
Unix Epoch datetime filter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from datetime import datetime | |
from django.db import models | |
from django_filters import FilterSet | |
from django_filters.filters import Filter | |
from my_app.models import MyModel # FIXME | |
class UnixEpochDateFilter(Filter): | |
def filter(self, qs, value): | |
if value: | |
try: | |
# Convert Unix milliseconds epoch to datetime | |
converted_date = datetime.fromtimestamp(int(value) / 1000) | |
except (ValueError, TypeError): | |
return qs.none() | |
lookup = "%s__%s" % (self.field_name, self.lookup_expr) | |
return qs.filter(**{lookup: converted_date}) | |
return qs | |
class MyModelFilter(FilterSet): | |
class Meta: | |
model = MyModel | |
fields = { | |
"activated_at": ["lte", "gte"], | |
"deactivated_at": ["lte", "gte"], | |
"created_at": ["lte", "gte"], | |
"updated_at": ["lte", "gte"], | |
} | |
filter_overrides = { | |
models.DateTimeField: { | |
"filter_class": UnixEpochDateFilter, | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment