69 lines
2.5 KiB
Python
69 lines
2.5 KiB
Python
"""
|
|
These serializers are used exclusively to import the file ``workdir/fixtures/products-meta.json``.
|
|
They are not intended for general purpose and can be deleted thereafter.
|
|
"""
|
|
from rest_framework import serializers
|
|
from shop.serializers.catalog import CMSPagesField, ImagesField, ValueRelatedField
|
|
from weirdlittleempire.models import (Commodity, SmartCard, SmartPhoneModel, SmartPhoneVariant,
|
|
Manufacturer, OperatingSystem, ProductPage, ProductImage)
|
|
from .translation import TranslatedFieldsField, TranslatedField, TranslatableModelSerializerMixin
|
|
|
|
|
|
class ProductSerializer(serializers.ModelSerializer):
|
|
product_model = serializers.CharField(read_only=True)
|
|
manufacturer = ValueRelatedField(model=Manufacturer)
|
|
images = ImagesField()
|
|
caption = TranslatedField()
|
|
cms_pages = CMSPagesField()
|
|
|
|
class Meta:
|
|
exclude = ['id', 'polymorphic_ctype', 'updated_at']
|
|
|
|
def create(self, validated_data):
|
|
cms_pages = validated_data.pop('cms_pages')
|
|
images = validated_data.pop('images')
|
|
product = super().create(validated_data)
|
|
for page in cms_pages:
|
|
ProductPage.objects.create(product=product, page=page)
|
|
for image in images:
|
|
ProductImage.objects.create(product=product, image=image)
|
|
return product
|
|
|
|
|
|
class CommoditySerializer(TranslatableModelSerializerMixin, ProductSerializer):
|
|
|
|
class Meta(ProductSerializer.Meta):
|
|
model = Commodity
|
|
exclude = ['id', 'placeholder', 'polymorphic_ctype', 'updated_at']
|
|
|
|
|
|
class SmartCardSerializer(TranslatableModelSerializerMixin, ProductSerializer):
|
|
multilingual = TranslatedFieldsField(
|
|
help_text="Helper to convert multilingual data into single field.",
|
|
)
|
|
|
|
class Meta(ProductSerializer.Meta):
|
|
model = SmartCard
|
|
|
|
|
|
class SmartphoneVariantSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SmartPhoneVariant
|
|
fields = ['product_code', 'unit_price', 'storage', 'quantity']
|
|
|
|
|
|
class SmartPhoneModelSerializer(TranslatableModelSerializerMixin, ProductSerializer):
|
|
multilingual = TranslatedFieldsField()
|
|
operating_system = ValueRelatedField(model=OperatingSystem)
|
|
variants = SmartphoneVariantSerializer(many=True)
|
|
|
|
class Meta(ProductSerializer.Meta):
|
|
model = SmartPhoneModel
|
|
|
|
def create(self, validated_data):
|
|
variants = validated_data.pop('variants')
|
|
product = super().create(validated_data)
|
|
for variant in variants:
|
|
SmartPhoneVariant.objects.create(product=product, **variant)
|
|
return product
|