mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 12:06:44 +00:00
Add custom InvenTreeDateFilter class (#5970)
- Fixes issues with naive datetimei object - Suppress warning - Closes https://github.com/inventree/InvenTree/issues/5223
This commit is contained in:
parent
7dec1fcb25
commit
cfddfa526e
@ -1,11 +1,34 @@
|
|||||||
"""General filters for InvenTree."""
|
"""General filters for InvenTree."""
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.utils import timezone
|
||||||
|
from django.utils.timezone import make_aware
|
||||||
|
|
||||||
from django_filters import rest_framework as rest_filters
|
from django_filters import rest_framework as rest_filters
|
||||||
from rest_framework import filters
|
from rest_framework import filters
|
||||||
|
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
|
|
||||||
|
|
||||||
|
class InvenTreeDateFilter(rest_filters.DateFilter):
|
||||||
|
"""Custom DateFilter class which handles timezones correctly."""
|
||||||
|
|
||||||
|
def filter(self, qs, value):
|
||||||
|
"""Override the filter method to handle timezones correctly."""
|
||||||
|
|
||||||
|
if settings.USE_TZ:
|
||||||
|
|
||||||
|
# Check if value is already timezone aware
|
||||||
|
if value is not None and not timezone.is_aware(value):
|
||||||
|
tz = timezone.get_current_timezone()
|
||||||
|
value = datetime(value.year, value.month, value.day)
|
||||||
|
value = make_aware(value, tz, True)
|
||||||
|
|
||||||
|
return super().filter(qs, value)
|
||||||
|
|
||||||
|
|
||||||
class InvenTreeSearchFilter(filters.SearchFilter):
|
class InvenTreeSearchFilter(filters.SearchFilter):
|
||||||
"""Custom search filter which allows adjusting of search terms dynamically"""
|
"""Custom search filter which allows adjusting of search terms dynamically"""
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ from build.models import Build, BuildItem
|
|||||||
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
|
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
|
||||||
ListCreateDestroyAPIView, MetadataView)
|
ListCreateDestroyAPIView, MetadataView)
|
||||||
from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER,
|
from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER,
|
||||||
SEARCH_ORDER_FILTER_ALIAS,
|
SEARCH_ORDER_FILTER_ALIAS, InvenTreeDateFilter,
|
||||||
InvenTreeSearchFilter)
|
InvenTreeSearchFilter)
|
||||||
from InvenTree.helpers import (DownloadFile, increment_serial_number, isNull,
|
from InvenTree.helpers import (DownloadFile, increment_serial_number, isNull,
|
||||||
str2bool, str2int)
|
str2bool, str2int)
|
||||||
@ -971,8 +971,8 @@ class PartFilter(rest_filters.FilterSet):
|
|||||||
tags_slug = rest_filters.CharFilter(field_name='tags__slug', lookup_expr='iexact')
|
tags_slug = rest_filters.CharFilter(field_name='tags__slug', lookup_expr='iexact')
|
||||||
|
|
||||||
# Created date filters
|
# Created date filters
|
||||||
created_before = rest_filters.DateFilter(label='Updated before', field_name='creation_date', lookup_expr='lte')
|
created_before = InvenTreeDateFilter(label='Updated before', field_name='creation_date', lookup_expr='lte')
|
||||||
created_after = rest_filters.DateFilter(label='Updated after', field_name='creation_date', lookup_expr='gte')
|
created_after = InvenTreeDateFilter(label='Updated after', field_name='creation_date', lookup_expr='gte')
|
||||||
|
|
||||||
|
|
||||||
class PartMixin:
|
class PartMixin:
|
||||||
|
@ -26,7 +26,7 @@ from generic.states.api import StatusView
|
|||||||
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
|
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
|
||||||
ListCreateDestroyAPIView, MetadataView)
|
ListCreateDestroyAPIView, MetadataView)
|
||||||
from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER,
|
from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER,
|
||||||
SEARCH_ORDER_FILTER_ALIAS)
|
SEARCH_ORDER_FILTER_ALIAS, InvenTreeDateFilter)
|
||||||
from InvenTree.helpers import (DownloadFile, extract_serial_numbers, isNull,
|
from InvenTree.helpers import (DownloadFile, extract_serial_numbers, isNull,
|
||||||
str2bool, str2int)
|
str2bool, str2int)
|
||||||
from InvenTree.mixins import (CreateAPI, CustomRetrieveUpdateDestroyAPI,
|
from InvenTree.mixins import (CreateAPI, CustomRetrieveUpdateDestroyAPI,
|
||||||
@ -680,17 +680,17 @@ class StockFilter(rest_filters.FilterSet):
|
|||||||
).distinct()
|
).distinct()
|
||||||
|
|
||||||
# Update date filters
|
# Update date filters
|
||||||
updated_before = rest_filters.DateFilter(label='Updated before', field_name='updated', lookup_expr='lte')
|
updated_before = InvenTreeDateFilter(label='Updated before', field_name='updated', lookup_expr='lte')
|
||||||
updated_after = rest_filters.DateFilter(label='Updated after', field_name='updated', lookup_expr='gte')
|
updated_after = InvenTreeDateFilter(label='Updated after', field_name='updated', lookup_expr='gte')
|
||||||
|
|
||||||
# Stock "expiry" filters
|
# Stock "expiry" filters
|
||||||
expiry_date_lte = rest_filters.DateFilter(
|
expiry_date_lte = InvenTreeDateFilter(
|
||||||
label=_("Expiry date before"),
|
label=_("Expiry date before"),
|
||||||
field_name='expiry_date',
|
field_name='expiry_date',
|
||||||
lookup_expr='lte',
|
lookup_expr='lte',
|
||||||
)
|
)
|
||||||
|
|
||||||
expiry_date_gte = rest_filters.DateFilter(
|
expiry_date_gte = InvenTreeDateFilter(
|
||||||
label=_('Expiry date after'),
|
label=_('Expiry date after'),
|
||||||
field_name='expiry_date',
|
field_name='expiry_date',
|
||||||
lookup_expr='gte',
|
lookup_expr='gte',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user