117 lines
3.3 KiB
Python
117 lines
3.3 KiB
Python
"""Search indexes app views."""
|
|
from rest_framework import permissions
|
|
from django_elasticsearch_dsl_drf import constants
|
|
from django_elasticsearch_dsl_drf.filter_backends import (FilteringFilterBackend,
|
|
GeoSpatialFilteringFilterBackend)
|
|
from django_elasticsearch_dsl_drf.viewsets import BaseDocumentViewSet
|
|
|
|
from utils.pagination import ProjectPageNumberPagination
|
|
from search_indexes import serializers, filters
|
|
from search_indexes.documents import EstablishmentDocument, NewsDocument
|
|
|
|
|
|
class NewsDocumentViewSet(BaseDocumentViewSet):
|
|
"""News document ViewSet."""
|
|
|
|
document = NewsDocument
|
|
lookup_field = 'slug'
|
|
pagination_class = ProjectPageNumberPagination
|
|
permission_classes = (permissions.AllowAny,)
|
|
serializer_class = serializers.NewsDocumentSerializer
|
|
ordering = ('id',)
|
|
|
|
filter_backends = [
|
|
filters.CustomSearchFilterBackend,
|
|
]
|
|
|
|
search_fields = (
|
|
'title',
|
|
'subtitle',
|
|
'description',
|
|
)
|
|
translated_search_fields = (
|
|
'title',
|
|
'subtitle',
|
|
'description',
|
|
)
|
|
|
|
|
|
class EstablishmentDocumentViewSet(BaseDocumentViewSet):
|
|
"""Establishment document ViewSet."""
|
|
|
|
document = EstablishmentDocument
|
|
lookup_field = 'slug'
|
|
pagination_class = ProjectPageNumberPagination
|
|
permission_classes = (permissions.AllowAny,)
|
|
serializer_class = serializers.EstablishmentDocumentSerializer
|
|
ordering = ('id',)
|
|
|
|
filter_backends = [
|
|
FilteringFilterBackend,
|
|
filters.CustomSearchFilterBackend,
|
|
GeoSpatialFilteringFilterBackend,
|
|
]
|
|
|
|
search_fields = (
|
|
'name',
|
|
'description',
|
|
)
|
|
translated_search_fields = (
|
|
'description',
|
|
)
|
|
filter_fields = {
|
|
'tag': 'tags.id',
|
|
'toque_number': {
|
|
'field': 'toque_number',
|
|
'lookups': [
|
|
constants.LOOKUP_FILTER_RANGE,
|
|
constants.LOOKUP_QUERY_GT,
|
|
constants.LOOKUP_QUERY_GTE,
|
|
constants.LOOKUP_QUERY_LT,
|
|
constants.LOOKUP_QUERY_LTE,
|
|
constants.LOOKUP_QUERY_IN,
|
|
]
|
|
},
|
|
'price_level': {
|
|
'field': 'price_level',
|
|
'lookups': [
|
|
constants.LOOKUP_FILTER_RANGE,
|
|
constants.LOOKUP_QUERY_GT,
|
|
constants.LOOKUP_QUERY_GTE,
|
|
constants.LOOKUP_QUERY_LT,
|
|
constants.LOOKUP_QUERY_LTE,
|
|
constants.LOOKUP_QUERY_IN,
|
|
]
|
|
},
|
|
'country_id': {
|
|
'field': 'address.city.country.id'
|
|
},
|
|
'country': {
|
|
'field': 'address.city.country.code'
|
|
},
|
|
'tags_id': {
|
|
'field': 'tags.id',
|
|
},
|
|
'tags_category_id': {
|
|
'field': 'tags.category.id',
|
|
},
|
|
'collection_type': {
|
|
'field': 'collections.collection_type'
|
|
},
|
|
'establishment_type': {
|
|
'field': 'establishment_type.id'
|
|
},
|
|
'establishment_subtypes': {
|
|
'field': 'establishment_subtypes.id'
|
|
},
|
|
}
|
|
|
|
geo_spatial_filter_fields = {
|
|
'location': {
|
|
'field': 'address.location',
|
|
'lookups': [
|
|
constants.LOOKUP_FILTER_GEO_BOUNDING_BOX,
|
|
]
|
|
}
|
|
}
|