object_254

Кастомный фильтр Date, когда поля DateTime

Dec 1st, 2021
1,006
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import django_filters
  2. from rest_framework import permissions, viewsets, filters
  3. from datetime import timedelta
  4.  
  5. # фильтр, чтобы захватывать след. день, т.к. при выборе даты, время устанавливается 00:00:00
  6. # и все записи этого дня не попадают в запрос
  7. class EndFilter(django_filters.DateFilter):
  8.     def filter(self, qs, value):
  9.         if value:
  10.             value = value + timedelta(days=1)
  11.         return super(EndFilter, self).filter(qs, value)
  12.  
  13. # кастомный фильтр даты начала и окончания
  14. class DepositFilter(django_filters.FilterSet):
  15.     time_start = django_filters.DateFilter(field_name='time_start', lookup_expr='gte')
  16.     time_end = EndFilter(field_name='time_end', lookup_expr='lte')
  17.  
  18.     class Meta:
  19.         model = Deposit
  20.         fields = ['time_start', 'time_end']
  21.  
  22.  
  23. class DepositViewSet(viewsets.ModelViewSet):
  24.     queryset = Deposit.objects.all()
  25.     permission_classes = [permissions.IsAuthenticated]
  26.     filter_backends = [DjangoFilterBackend, filters.SearchFilter]
  27.  
  28.     search_fields = ['table__number']
  29.     # выбор кастомного фильтра
  30.     filter_class = DepositFilter
RAW Paste Data