Source code for oscarapi.serializers.product

from rest_framework import serializers

from oscarapi.utils import (
    OscarModelSerializer,
    overridable,
    OscarHyperlinkedModelSerializer
)
from oscar.core.loading import get_model


Product = get_model('catalogue', 'Product')
ProductClass = get_model('catalogue', 'ProductClass')
ProductCategory = get_model('catalogue', 'ProductCategory')
ProductAttribute = get_model('catalogue', 'ProductAttribute')
ProductAttributeValue = get_model('catalogue', 'ProductAttributeValue')
ProductImage = get_model('catalogue', 'ProductImage')
Option = get_model('catalogue', 'Option')
Partner = get_model('partner', 'Partner')


class PartnerSerializer(OscarModelSerializer):
    class Meta:
        model = Partner
        fields = '__all__'


[docs]class OptionSerializer(OscarHyperlinkedModelSerializer): class Meta: model = Option fields = overridable('OSCARAPI_OPTION_FIELDS', default=( 'url', 'id', 'name', 'code', 'type' ))
[docs]class ProductLinkSerializer(OscarHyperlinkedModelSerializer): class Meta: model = Product fields = overridable( 'OSCARAPI_PRODUCT_FIELDS', default=( 'url', 'id', 'title' ))
[docs]class ProductAttributeValueSerializer(OscarModelSerializer): name = serializers.StringRelatedField(source="attribute") value = serializers.StringRelatedField() class Meta: model = ProductAttributeValue fields = overridable('OSCARAPI_PRODUCT_ATTRIBUTE_VALUE_FIELDS', default=('name', 'value',))
[docs]class ProductAttributeSerializer(OscarModelSerializer): productattributevalue_set = ProductAttributeValueSerializer(many=True) class Meta: model = ProductAttribute fields = overridable('OSCARAPI_PRODUCT_ATTRIBUTE_FIELDS', default=('name', 'productattributevalue_set'))
class ProductImageSerializer(OscarModelSerializer): class Meta: model = ProductImage fields = '__all__' class AvailabilitySerializer(serializers.Serializer): is_available_to_buy = serializers.BooleanField() num_available = serializers.IntegerField(required=False) message = serializers.CharField()
[docs]class RecommmendedProductSerializer(OscarModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='product-detail') class Meta: model = Product fields = overridable( 'OSCARAPI_RECOMMENDED_PRODUCT_FIELDS', default=('url',))
[docs]class ProductSerializer(OscarModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='product-detail') stockrecords = serializers.HyperlinkedIdentityField( view_name='product-stockrecord-list') attributes = ProductAttributeValueSerializer( many=True, required=False, source="attribute_values") categories = serializers.StringRelatedField(many=True, required=False) product_class = serializers.StringRelatedField(required=False) images = ProductImageSerializer(many=True, required=False) price = serializers.HyperlinkedIdentityField(view_name='product-price') availability = serializers.HyperlinkedIdentityField( view_name='product-availability') options = OptionSerializer(many=True, required=False) recommended_products = RecommmendedProductSerializer( many=True, required=False) class Meta: model = Product fields = overridable( 'OSCARAPI_PRODUCTDETAIL_FIELDS', default=( 'url', 'id', 'title', 'description', 'date_created', 'date_updated', 'recommended_products', 'attributes', 'categories', 'product_class', 'stockrecords', 'images', 'price', 'availability', 'options'))
class OptionValueSerializer(serializers.Serializer): option = serializers.HyperlinkedRelatedField( view_name='option-detail', queryset=Option.objects) value = serializers.CharField() class AddProductSerializer(serializers.Serializer): """ Serializes and validates an add to basket request. """ quantity = serializers.IntegerField(required=True) url = serializers.HyperlinkedRelatedField( view_name='product-detail', queryset=Product.objects, required=True) options = OptionValueSerializer(many=True, required=False) class Meta: model = Product