Init Django-SHOP
This commit is contained in:
68
weirdlittleempire/management/serializers.py
Normal file
68
weirdlittleempire/management/serializers.py
Normal file
@@ -0,0 +1,68 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user