"""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 django_elasticsearch_dsl_drf.pagination import PageNumberPagination from search_indexes import serializers, filters from search_indexes.documents import EstablishmentDocument, NewsDocument class NewsDocumentViewSet(BaseDocumentViewSet): """News document ViewSet.""" document = NewsDocument lookup_field = 'id' pagination_class = PageNumberPagination 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 = 'id' pagination_class = PageNumberPagination 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, ] } }