I want to add conditions in my start date, like start date have to be <= today and end date > today
class PartLogFilter(django_filters.FilterSet):
date_range = django_filters.DateFromToRangeFilter(
label='By Date Range',
method='filter_by_range',
widget=RangeWidget(attrs={'class': 'datepicker', 'type': 'date'})
)
class Meta:
model = PartLog
fields = ['date_range']
def filter_by_range(self, queryset, name, value):
start = value.start
end = value.stop
return queryset.filter(transaction_time__gte=start, transaction_time__lte=end)
from django.utils import timezone
from django_filters import FilterSet, DateFromToRangeFilter
from django_filters.widgets import RangeWidget
from .models import PartLog # Assuming your model is named PartLog
class PartLogFilter(FilterSet):
date_range = DateFromToRangeFilter(
label='By Date Range',
method='filter_by_range',
widget=RangeWidget(attrs={'class': 'datepicker', 'type': 'date'})
)
class Meta:
model = PartLog
fields = ['date_range']
def filter_by_range(self, queryset, name, value):
# Get today's date
today = timezone.now().date()
start = value.start
end = value.stop
# Check if start date is less than or equal to today and end date is greater than today
if start and end:
if start <= today and end > today:
return queryset.filter(transaction_time__gte=start, transaction_time__lte=end)
else:
# You might want to raise an error or handle this scenario appropriately
return queryset.none() # Return no results if conditions are not met
elif start:
# Only start date provided
if start <= today:
return queryset.filter(transaction_time__gte=start)
elif end:
# Only end date provided
if end > today:
return queryset.filter(transaction_time__lte=end)
return queryset # Return the original queryset if no valid date range is provided