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.