Serializers for product document

This commit is contained in:
Kuroshini 2019-10-16 14:11:07 +03:00
parent 179da8305c
commit 81ebd5764c
4 changed files with 109 additions and 3 deletions

View File

@ -22,12 +22,30 @@ class ProductDocument(Document):
})
subtypes = fields.ObjectField(
properties={
'id': fields.IntegerField(),
'name': fields.ObjectField(attr='name_indexing', properties=OBJECT_FIELD_PROPERTIES),
'index_name': fields.KeywordField(),
},
multi=True
)
establishment = fields.ObjectField(
properties={
'id': fields.IntegerField(),
'name': fields.KeywordField(),
'slug': fields.KeywordField(),
# 'city' TODO: city indexing
}
)
wine_colors = fields.ObjectField(
properties={
'id': fields.IntegerField(),
'label': fields.ObjectField(attr='label_indexing', properties=OBJECT_FIELD_PROPERTIES),
'value': fields.KeywordField(),
},
multi=True,
)
wine_region = fields.ObjectField(properties={
'id': fields.IntegerField(),
'name': fields.KeywordField(),
'country': fields.ObjectField(properties={
'id': fields.IntegerField(),
@ -71,6 +89,7 @@ class ProductDocument(Document):
})
tags = fields.ObjectField(
properties={
'id': fields.IntegerField(),
'label': fields.ObjectField(attr='label_indexing', properties=OBJECT_FIELD_PROPERTIES),
'value': fields.KeywordField(),
},

View File

@ -20,6 +20,62 @@ class TagsDocumentSerializer(serializers.Serializer):
return get_translated_value(obj.label)
class ProductSubtypeDocumentSerializer(serializers.Serializer):
"""Product subtype serializer for ES Document."""
id = serializers.IntegerField()
name_translated = serializers.SerializerMethodField()
@staticmethod
def get_name_translted(obj):
return get_translated_value(obj.name)
class WineRegionCountryDocumentSerialzer(serializers.Serializer):
"""Wine region country ES document serializer."""
id = serializers.IntegerField()
code = serializers.CharField()
name_translated = serializers.SerializerMethodField()
@staticmethod
def get_name_translated(obj):
return get_translated_value(obj.name)
def get_attribute(self, instance):
return instance.country
class WineRegionDocumentSerializer(serializers.Serializer):
"""Wine region ES document serializer."""
id = serializers.IntegerField()
name = serializers.CharField()
country = WineRegionCountryDocumentSerialzer(allow_null=True)
class WineColorDocumentSerializer(serializers.Serializer):
"""Wine color ES document serializer,"""
id = serializers.IntegerField()
label_translated = serializers.SerializerMethodField()
index_name = serializers.CharField(source='value')
@staticmethod
def get_label_translated(obj):
if isinstance(obj, dict):
return get_translated_value(obj.get('label'))
return get_translated_value(obj.label)
class ProductEstablishmentDocumentSerializer(serializers.Serializer):
"""Related to Product Establishment ES document serializer."""
id = serializers.IntegerField()
name = serializers.CharField()
slug = serializers.CharField()
class CityDocumentShortSerializer(serializers.Serializer):
"""City serializer for ES Document,"""
@ -129,6 +185,17 @@ class EstablishmentDocumentSerializer(DocumentSerializer):
class ProductDocumentSerializer(DocumentSerializer):
"""Product document serializer"""
tags = TagsDocumentSerializer(many=True)
subtypes = ProductSubtypeDocumentSerializer(many=True)
wine_region = WineRegionDocumentSerializer(allow_null=True)
wine_colors = WineColorDocumentSerializer(many=True)
product_type = serializers.SerializerMethodField()
establishment_detail = ProductEstablishmentDocumentSerializer(source='establishment', allow_null=True)
@staticmethod
def get_product_type(obj):
return get_translated_value(obj.product_type.name if obj.product_type else {})
class Meta:
"""Meta class."""
@ -143,5 +210,11 @@ class ProductDocumentSerializer(DocumentSerializer):
'old_id',
'state',
'old_unique_key',
'vintage'
'vintage',
'tags',
'product_type',
'subtypes',
'wine_region',
'wine_colors',
'establishment_detail',
)

View File

@ -8,7 +8,7 @@ router = routers.SimpleRouter()
router.register(r'establishments', views.EstablishmentDocumentViewSet, basename='establishment')
router.register(r'mobile/establishments', views.EstablishmentDocumentViewSet, basename='establishment-mobile')
router.register(r'news', views.NewsDocumentViewSet, basename='news')
router.register(r'product', views.ProductDocumentViewSet, basename='product')
router.register(r'products', views.ProductDocumentViewSet, basename='product')
urlpatterns = router.urls

View File

@ -205,9 +205,16 @@ class ProductDocumentViewSet(BaseDocumentViewSet):
serializer_class = serializers.ProductDocumentSerializer
ordering = ('id',)
# def get_queryset(self):
# qs = super(ProductDocumentViewSet, self).get_queryset()
# qs = qs.filter('match', is_publish=True)
# return qs
filter_backends = [
filters.CustomSearchFilterBackend,
FilteringFilterBackend,
filters.CustomSearchFilterBackend,
GeoSpatialFilteringFilterBackend,
DefaultOrderingFilterBackend,
]
search_fields = {
@ -216,4 +223,11 @@ class ProductDocumentViewSet(BaseDocumentViewSet):
)
filter_fields = {
'slug': 'slug',
'tag': {
'field': 'tags.id',
'lookups': [constants.LOOKUP_QUERY_IN]
},
}
geo_spatial_filter_fields = {
}