mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +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."""
|
||||
|
||||
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 rest_framework import filters
|
||||
|
||||
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):
|
||||
"""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,
|
||||
ListCreateDestroyAPIView, MetadataView)
|
||||
from InvenTree.filters import (ORDER_FILTER, SEARCH_ORDER_FILTER,
|
||||
SEARCH_ORDER_FILTER_ALIAS,
|
||||
SEARCH_ORDER_FILTER_ALIAS, InvenTreeDateFilter,
|
||||
InvenTreeSearchFilter)
|
||||
from InvenTree.helpers import (DownloadFile, increment_serial_number, isNull,
|
||||
str2bool, str2int)
|
||||
@ -971,8 +971,8 @@ class PartFilter(rest_filters.FilterSet):
|
||||
tags_slug = rest_filters.CharFilter(field_name='tags__slug', lookup_expr='iexact')
|
||||
|
||||
# Created date filters
|
||||
created_before = rest_filters.DateFilter(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_before = InvenTreeDateFilter(label='Updated before', field_name='creation_date', lookup_expr='lte')
|
||||
created_after = InvenTreeDateFilter(label='Updated after', field_name='creation_date', lookup_expr='gte')
|
||||
|
||||
|
||||
class PartMixin:
|
||||
|
@ -26,7 +26,7 @@ from generic.states.api import StatusView
|
||||
from InvenTree.api import (APIDownloadMixin, AttachmentMixin,
|
||||
ListCreateDestroyAPIView, MetadataView)
|
||||
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,
|
||||
str2bool, str2int)
|
||||
from InvenTree.mixins import (CreateAPI, CustomRetrieveUpdateDestroyAPI,
|
||||
@ -680,17 +680,17 @@ class StockFilter(rest_filters.FilterSet):
|
||||
).distinct()
|
||||
|
||||
# Update date filters
|
||||
updated_before = rest_filters.DateFilter(label='Updated before', field_name='updated', lookup_expr='lte')
|
||||
updated_after = rest_filters.DateFilter(label='Updated after', field_name='updated', lookup_expr='gte')
|
||||
updated_before = InvenTreeDateFilter(label='Updated before', field_name='updated', lookup_expr='lte')
|
||||
updated_after = InvenTreeDateFilter(label='Updated after', field_name='updated', lookup_expr='gte')
|
||||
|
||||
# Stock "expiry" filters
|
||||
expiry_date_lte = rest_filters.DateFilter(
|
||||
expiry_date_lte = InvenTreeDateFilter(
|
||||
label=_("Expiry date before"),
|
||||
field_name='expiry_date',
|
||||
lookup_expr='lte',
|
||||
)
|
||||
|
||||
expiry_date_gte = rest_filters.DateFilter(
|
||||
expiry_date_gte = InvenTreeDateFilter(
|
||||
label=_('Expiry date after'),
|
||||
field_name='expiry_date',
|
||||
lookup_expr='gte',
|
||||
|
Loading…
Reference in New Issue
Block a user