Serializers for product document
This commit is contained in:
parent
179da8305c
commit
81ebd5764c
|
|
@ -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(),
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user