DRF SearchFilter Datetimefield Неподдерживаемый поиск 'gte'

У меня есть поле timestamp, которое является полем DateTime, когда я фильтрую по этому полю в оболочке, оно прекрасно работает с '__gte' или '__lte'

$ python manage.py shell     
>>> from inventory.models import Order
>>> Order.objects.filter(timestamp__date__gte=('2022-06-06'))
>>> <QuerySet [<Order: ID: 22>, <Order_id: 27>, ....]

но когда я использую SearchFilter, он выдает ошибку django.core.exceptions.FieldError: Unsupported lookup 'gte' for DateField or join on the field not permitted, perhaps you meant gte or gt or lte?

models.py

class Order(models.Model):
    timestamp = models.DateTimeField(auto_now_add=True)

views.py

from rest_framework.generics import ListAPIView
from rest_framework import filters

class Invoices(ListAPIView):
    serializer_class = InvoicesSerializer
    permission_classes = [IsAuthenticated, CustomModelPermissions]
    queryset = serializer_class.Meta.model.objects.all()
    filter_backends = [filters.SearchFilter]
    search_fields = ['timestamp__date__gte']

Попробуйте применить фильтр без __даты

Order.objects.filter(timestamp__gte= datetime.date(2022,6,6))

Or

Order.objects.filter(timestamp__gte='2022-06-06')

Потому что ваше поле timestamp уже является полем даты

Ваш фильтр не работает, потому что, согласно документации,

Атрибут search_fields должен представлять собой список имен полей текстового типа в модели, таких как CharField или TextField

.

Если вам нужен GTE lookup, то вам нужно добавить FilterSet, например, как в Как создать datetime фильтр с помощью Django Rest Framework Filters.

Вернуться на верх