Django rest elasticsearch filter range in url query params
Я использую elasticsearch с django rest framework. Я использую эту библиотеку: https://github.com/barseghyanartur/django-elasticsearch-dsl-drf/
Я пытаюсь фильтровать по ценовому диапазону в соответствии с этими документами: https://github.com/barseghyanartur/django-elasticsearch-dsl-drf/
Вот мои взгляды:
class TestAPIView(DocumentViewSet):
document = TestDocument
serializer_class = TestSerializer
queryset = TestModel.objects.all()
filter_backends = [
FilteringFilterBackend
]
filter_fields = {
'price': {
'field': 'price',
'lookups': [
LOOKUP_FILTER_RANGE,
LOOKUP_QUERY_IN,
],
},
}
и это мой document.py
файл
@registry.register_document
class TestDocument(Document):
price = fields.IntegerField(attr='price')
class Index:
name = 'TestModel'
settings = {
'number_of_shards': 1,
'number_of_replicas': 0,
}
class Django:
model = TestModel
fields = [
'id',
]
Когда я ввожу в браузер этот url: http://127.0.0.1:8000/search/api/v1/test-model/?price=12
Он работает очень хорошо, даже когда я пробую с этим url: http://127.0.0.1:8000/search/api/v1/test-model/?price=55
он работает,
Я столкнулся с проблемой фильтрации по диапазону, например, я хочу отфильтровать цену 12
по цене 90
, в этом случае как я могу передать параметр запроса для диапазона? Кто-нибудь может помочь мне в этом случае?
В исходном коде [GitHub] приведен пример этого:
# Example: {"query": {"range": {"age": {"gte": "16", "lte": "67"}}}} # Example: http://localhost:8000/api/users/?age__range=16__67
Таким образом, вы можете фильтровать с помощью:
http://127.0.0.1:8000/search/api/v1/test-model/?price__range=12__90
для получения товаров с ценой от 12 до 90.