url 查询参数中的 Django rest elasticsearch 过滤器范围
Django rest elasticsearch filter range in url query params
我正在将 elasticsearch 与 django rest 框架一起使用。我正在使用这个库:
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
,在这种情况下,我该如何传递范围的查询参数?在这种情况下,有人可以帮助我吗?
source code [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 之间的商品。
我正在将 elasticsearch 与 django rest 框架一起使用。我正在使用这个库: 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
,在这种情况下,我该如何传递范围的查询参数?在这种情况下,有人可以帮助我吗?
source code [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 之间的商品。