diff --git a/apps/search_indexes/serializers.py b/apps/search_indexes/serializers.py index 480f509d..1d8e3ca3 100644 --- a/apps/search_indexes/serializers.py +++ b/apps/search_indexes/serializers.py @@ -46,6 +46,7 @@ class EstablishmentDocumentSerializer(DocumentSerializer): description_translated = serializers.SerializerMethodField(allow_null=True) + preview_image = serializers.URLField(source='preview_image_url') class Meta: """Meta class.""" @@ -53,7 +54,6 @@ class EstablishmentDocumentSerializer(DocumentSerializer): fields = ( 'id', 'name', - 'description', 'public_mark', 'toque_number', 'price_level', @@ -63,10 +63,34 @@ class EstablishmentDocumentSerializer(DocumentSerializer): 'collections', 'establishment_type', 'establishment_subtypes', - 'preview_image_url', + 'preview_image', 'slug', ) @staticmethod def get_description_translated(obj): return get_translated_value(obj.description) + + def to_representation(self, instance): + ret = super().to_representation(instance) + dict_merge = lambda a, b: a.update(b) or a + + ret['tags'] = map(lambda tag: dict_merge(tag, {'label_translated': get_translated_value(tag.pop('label'))}), + ret['tags']) + ret['establishment_subtypes'] = map( + lambda subtype: dict_merge(subtype, {'name_translated': get_translated_value(subtype.pop('name'))}), + ret['establishment_subtypes']) + if ret.get('establishment_type'): + ret['establishment_type']['name_translated'] = get_translated_value(ret['establishment_type'].pop('name')) + if ret.get('address'): + ret['address']['city']['country']['name_translated'] = get_translated_value( + ret['address']['city']['country'].pop('name')) + location = ret['address'].pop('location') + if location: + ret['address']['geo_lon'] = location['lon'] + ret['address']['geo_lat'] = location['lat'] + + ret['type'] = ret.pop('establishment_type') + ret['subtypes'] = ret.pop('establishment_subtypes') + + return ret \ No newline at end of file diff --git a/apps/search_indexes/utils.py b/apps/search_indexes/utils.py index 93be9e81..0c1dd187 100644 --- a/apps/search_indexes/utils.py +++ b/apps/search_indexes/utils.py @@ -17,4 +17,6 @@ def get_translated_value(value): return None elif not isinstance(value, dict): field_dict = value.to_dict() + elif isinstance(value, dict): + field_dict = value return field_dict.get(get_current_language()) diff --git a/apps/utils/tests.py b/apps/utils/tests.py index 0ca77b6b..4adc2f1e 100644 --- a/apps/utils/tests.py +++ b/apps/utils/tests.py @@ -1,5 +1,5 @@ import pytz -from datetime import datetime +from datetime import datetime, timedelta from rest_framework.test import APITestCase from rest_framework import status @@ -52,17 +52,18 @@ class TranslateFieldTests(BaseTestCase): }, description={"en-GB": "Test description"}, playlist=1, - start=datetime.now(pytz.utc), - end=datetime.now(pytz.utc), + start=datetime.now(pytz.utc) + timedelta(hours=-13), + end=datetime.now(pytz.utc) + timedelta(hours=13), is_publish=True, - news_type=self.news_type + news_type=self.news_type, + slug='test', ) def test_model_field(self): self.assertIsNotNone(getattr(self.news_item, "title_translated", None)) def test_read_locale(self): - response = self.client.get(f"/api/web/news/{self.news_item.id}/", format='json') + response = self.client.get(f"/api/web/news/slug/{self.news_item.slug}/", format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) news_data = response.json()