translated field into serializer

This commit is contained in:
evgeniy-st 2019-09-09 14:55:44 +03:00
parent b326d7b8fd
commit 87efc50d94
3 changed files with 39 additions and 11 deletions

View File

@ -1,6 +1,7 @@
"""News app documents."""
from django.conf import settings
from django_elasticsearch_dsl import Document, Index, fields
from search_indexes.utils import OBJECT_FIELD_PROPERTIES
from news import models
@ -16,9 +17,9 @@ class NewsDocument(Document):
'id': fields.IntegerField(),
'name': fields.KeywordField()
})
title = fields.ObjectField()
subtitle = fields.ObjectField()
description = fields.ObjectField()
title = fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES)
subtitle = fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES)
description = fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES)
country = fields.NestedField(properties={
'id': fields.IntegerField(),
'code': fields.KeywordField()
@ -45,5 +46,3 @@ class NewsDocument(Document):
def prepare_description(self, instance):
return instance.description

View File

@ -2,13 +2,15 @@
from rest_framework import serializers
from django_elasticsearch_dsl_drf.serializers import DocumentSerializer
from search_indexes.documents.news import NewsDocument
from utils.models import get_current_language
from search_indexes.utils import get_translated_value
class NewsDocumentSerializer(DocumentSerializer):
"""News document serializer."""
title_translated = serializers.SerializerMethodField(allow_null=True)
subtitle_translated = serializers.SerializerMethodField(allow_null=True)
description_translated = serializers.SerializerMethodField(allow_null=True)
class Meta:
"""Meta class."""
@ -21,10 +23,18 @@ class NewsDocumentSerializer(DocumentSerializer):
'description',
'web_url',
'title_translated',
'subtitle_translated',
'description_translated',
)
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())
@staticmethod
def get_title_translated(obj):
return get_translated_value(obj.title)
@staticmethod
def get_subtitle_translated(obj):
return get_translated_value(obj.subtitle)
@staticmethod
def get_description_translated(obj):
return get_translated_value(obj.description)

View File

@ -0,0 +1,19 @@
"""Search indexes utils."""
from django_elasticsearch_dsl import fields
from utils.models import get_current_language
# object field properties
OBJECT_FIELD_PROPERTIES = {
'en-GB': fields.TextField(analyzer='english'),
'ru-RU': fields.TextField(analyzer='russian'),
}
# todo: refactor serializer
def get_translated_value(value):
if value is None:
return None
elif not isinstance(value, dict):
field_dict = value.to_dict()
return field_dict.get(get_current_language())