From 43804ae5abf7550ddbc6229e248aead91edc4c53 Mon Sep 17 00:00:00 2001 From: evgeniy-st Date: Fri, 6 Sep 2019 17:34:21 +0300 Subject: [PATCH] some fixes --- apps/search_indexes/documents/news.py | 21 +++++++++++++++------ apps/search_indexes/serializers.py | 12 +++++++----- apps/search_indexes/views.py | 25 ++++++++++++++++++------- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/apps/search_indexes/documents/news.py b/apps/search_indexes/documents/news.py index b206ea5e..2b86ee5d 100644 --- a/apps/search_indexes/documents/news.py +++ b/apps/search_indexes/documents/news.py @@ -1,29 +1,38 @@ """News app documents.""" from django.conf import settings from django_elasticsearch_dsl import Document, Index, fields -from news.models import News +from news import models -INDEX = Index(settings.ELASTICSEARCH_INDEX_NAMES[__name__]) -INDEX.settings(number_of_shards=1, number_of_replicas=1) +NEWS_INDEX = Index(settings.ELASTICSEARCH_INDEX_NAMES[__name__]) +NEWS_INDEX.settings(number_of_shards=1, number_of_replicas=1) -@INDEX.doc_type +@NEWS_INDEX.doc_type class NewsDocument(Document): """News document.""" + news_type = fields.NestedField(properties={ + 'id': fields.IntegerField(), + 'name': fields.KeywordField() + }) title = fields.ObjectField() subtitle = fields.ObjectField() description = fields.ObjectField() - web_url = fields.StringField(attr='web_url') + country = fields.NestedField(properties={ + 'id': fields.IntegerField(), + 'code': fields.KeywordField() + }) + web_url = fields.KeywordField(attr='web_url') class Django: - model = News + model = models.News fields = ( 'id', 'playlist', ) + related_models = [models.NewsType] def get_queryset(self): return super().get_queryset().published() diff --git a/apps/search_indexes/serializers.py b/apps/search_indexes/serializers.py index ce459c15..75c1bc04 100644 --- a/apps/search_indexes/serializers.py +++ b/apps/search_indexes/serializers.py @@ -6,10 +6,9 @@ from utils.models import get_current_language class NewsDocumentSerializer(DocumentSerializer): - """News document serialzier.""" + """News document serializer.""" - title_translated = serializers.SerializerMethodField(method_name='get_title_translated', - allow_null=True) + title_translated = serializers.SerializerMethodField(allow_null=True) class Meta: """Meta class.""" @@ -24,5 +23,8 @@ class NewsDocumentSerializer(DocumentSerializer): 'title_translated', ) - def get_title_translated(self, instance): - return instance.title.get(get_current_language()) + def get_title_translated(self, obj): + title_dict = obj.title + if not isinstance(title_dict, dict): + title_dict = obj.title.to_dict() + return title_dict.get(get_current_language()) diff --git a/apps/search_indexes/views.py b/apps/search_indexes/views.py index a5a045d2..4aad078c 100644 --- a/apps/search_indexes/views.py +++ b/apps/search_indexes/views.py @@ -10,13 +10,13 @@ from search_indexes.documents import NewsDocument # LOOKUP_QUERY_GT, # ) # -# from django_elasticsearch_dsl_drf.filter_backends import ( -# FilteringFilterBackend, -# IdsFilterBackend, -# OrderingFilterBackend, -# SearchFilterBackend, -# DefaultOrderingFilterBackend, -# ) +from django_elasticsearch_dsl_drf.filter_backends import ( + FilteringFilterBackend, + IdsFilterBackend, + OrderingFilterBackend, + SearchFilterBackend, + DefaultOrderingFilterBackend, +) class NewsDocumentViewSet(BaseDocumentViewSet): @@ -27,3 +27,14 @@ class NewsDocumentViewSet(BaseDocumentViewSet): pagination_class = PageNumberPagination permission_classes = (permissions.AllowAny,) serializer_class = serializers.NewsDocumentSerializer + ordering = ('id',) + # + filter_backends = [ + # DefaultOrderingFilterBackend, + # FilteringFilterBackend, + SearchFilterBackend, + ] + # + # search_fields = ( + # 'playlist', 'title', 'subtitle', 'description' + # ) \ No newline at end of file