diff --git a/apps/location/models.py b/apps/location/models.py index ed12ad4f..5b2fa721 100644 --- a/apps/location/models.py +++ b/apps/location/models.py @@ -1,20 +1,20 @@ """Location app models.""" +from functools import reduce +from json import dumps +from typing import List + from django.conf import settings from django.contrib.gis.db import models +from django.contrib.postgres.fields import ArrayField from django.db.models.signals import post_save from django.db.transaction import on_commit from django.dispatch import receiver from django.utils.translation import gettext_lazy as _ -from functools import reduce -from typing import List -from django.contrib.postgres.fields.jsonb import KeyTextTransform - -from django.contrib.postgres.fields import ArrayField from translation.models import Language from utils.models import (ProjectBaseMixin, SVGImageMixin, TJSONField, TranslatedFieldsMixin, get_current_locale, - IntermediateGalleryModelMixin, GalleryMixin) + IntermediateGalleryModelMixin) class CountryQuerySet(models.QuerySet): @@ -180,6 +180,11 @@ class City(models.Model, TranslatedFieldsMixin): def __str__(self): return self.name + @property + def name_dumped(self): + """Used for indexing as string""" + return dumps(self.name) + @property def image_object(self): """Return image object.""" diff --git a/apps/search_indexes/documents/establishment.py b/apps/search_indexes/documents/establishment.py index d079036d..2a873e12 100644 --- a/apps/search_indexes/documents/establishment.py +++ b/apps/search_indexes/documents/establishment.py @@ -175,6 +175,7 @@ class EstablishmentDocument(Document): 'city': fields.ObjectField( properties={ 'id': fields.IntegerField(), + 'name': fields.KeywordField(attr='name_dumped'), 'name_translated': fields.KeywordField(), 'is_island': fields.BooleanField(), 'country': fields.ObjectField( diff --git a/apps/search_indexes/documents/product.py b/apps/search_indexes/documents/product.py index 3db6adec..a2bc377f 100644 --- a/apps/search_indexes/documents/product.py +++ b/apps/search_indexes/documents/product.py @@ -44,6 +44,7 @@ class ProductDocument(Document): attr='address.city', properties={ 'id': fields.IntegerField(), + 'name': fields.KeywordField(attr='name_dumped'), 'name_translated': fields.KeywordField(), 'code': fields.KeywordField(), 'country': fields.ObjectField( diff --git a/apps/search_indexes/serializers.py b/apps/search_indexes/serializers.py index 8c4b9396..549255db 100644 --- a/apps/search_indexes/serializers.py +++ b/apps/search_indexes/serializers.py @@ -125,7 +125,12 @@ class CityDocumentShortSerializer(serializers.Serializer): id = serializers.IntegerField() code = serializers.CharField(allow_null=True) # todo: index and use name dict field - name_translated = serializers.CharField() + name_translated = serializers.SerializerMethodField() + + @staticmethod + def get_name_translated(obj): + get_translated_value(loads(obj.name)) + class CountryDocumentSerializer(serializers.Serializer):