Serializers for product document
This commit is contained in:
parent
179da8305c
commit
81ebd5764c
|
|
@ -22,12 +22,30 @@ class ProductDocument(Document):
|
||||||
})
|
})
|
||||||
subtypes = fields.ObjectField(
|
subtypes = fields.ObjectField(
|
||||||
properties={
|
properties={
|
||||||
|
'id': fields.IntegerField(),
|
||||||
'name': fields.ObjectField(attr='name_indexing', properties=OBJECT_FIELD_PROPERTIES),
|
'name': fields.ObjectField(attr='name_indexing', properties=OBJECT_FIELD_PROPERTIES),
|
||||||
'index_name': fields.KeywordField(),
|
'index_name': fields.KeywordField(),
|
||||||
},
|
},
|
||||||
multi=True
|
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={
|
wine_region = fields.ObjectField(properties={
|
||||||
|
'id': fields.IntegerField(),
|
||||||
'name': fields.KeywordField(),
|
'name': fields.KeywordField(),
|
||||||
'country': fields.ObjectField(properties={
|
'country': fields.ObjectField(properties={
|
||||||
'id': fields.IntegerField(),
|
'id': fields.IntegerField(),
|
||||||
|
|
@ -71,6 +89,7 @@ class ProductDocument(Document):
|
||||||
})
|
})
|
||||||
tags = fields.ObjectField(
|
tags = fields.ObjectField(
|
||||||
properties={
|
properties={
|
||||||
|
'id': fields.IntegerField(),
|
||||||
'label': fields.ObjectField(attr='label_indexing', properties=OBJECT_FIELD_PROPERTIES),
|
'label': fields.ObjectField(attr='label_indexing', properties=OBJECT_FIELD_PROPERTIES),
|
||||||
'value': fields.KeywordField(),
|
'value': fields.KeywordField(),
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,62 @@ class TagsDocumentSerializer(serializers.Serializer):
|
||||||
return get_translated_value(obj.label)
|
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):
|
class CityDocumentShortSerializer(serializers.Serializer):
|
||||||
"""City serializer for ES Document,"""
|
"""City serializer for ES Document,"""
|
||||||
|
|
||||||
|
|
@ -129,6 +185,17 @@ class EstablishmentDocumentSerializer(DocumentSerializer):
|
||||||
class ProductDocumentSerializer(DocumentSerializer):
|
class ProductDocumentSerializer(DocumentSerializer):
|
||||||
"""Product document serializer"""
|
"""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:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
||||||
|
|
@ -143,5 +210,11 @@ class ProductDocumentSerializer(DocumentSerializer):
|
||||||
'old_id',
|
'old_id',
|
||||||
'state',
|
'state',
|
||||||
'old_unique_key',
|
'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'establishments', views.EstablishmentDocumentViewSet, basename='establishment')
|
||||||
router.register(r'mobile/establishments', views.EstablishmentDocumentViewSet, basename='establishment-mobile')
|
router.register(r'mobile/establishments', views.EstablishmentDocumentViewSet, basename='establishment-mobile')
|
||||||
router.register(r'news', views.NewsDocumentViewSet, basename='news')
|
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
|
urlpatterns = router.urls
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -205,9 +205,16 @@ class ProductDocumentViewSet(BaseDocumentViewSet):
|
||||||
serializer_class = serializers.ProductDocumentSerializer
|
serializer_class = serializers.ProductDocumentSerializer
|
||||||
ordering = ('id',)
|
ordering = ('id',)
|
||||||
|
|
||||||
|
# def get_queryset(self):
|
||||||
|
# qs = super(ProductDocumentViewSet, self).get_queryset()
|
||||||
|
# qs = qs.filter('match', is_publish=True)
|
||||||
|
# return qs
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = [
|
||||||
filters.CustomSearchFilterBackend,
|
|
||||||
FilteringFilterBackend,
|
FilteringFilterBackend,
|
||||||
|
filters.CustomSearchFilterBackend,
|
||||||
|
GeoSpatialFilteringFilterBackend,
|
||||||
|
DefaultOrderingFilterBackend,
|
||||||
]
|
]
|
||||||
|
|
||||||
search_fields = {
|
search_fields = {
|
||||||
|
|
@ -216,4 +223,11 @@ class ProductDocumentViewSet(BaseDocumentViewSet):
|
||||||
)
|
)
|
||||||
|
|
||||||
filter_fields = {
|
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