Init Django-SHOP

This commit is contained in:
2021-02-23 22:57:30 +00:00
parent 8842939839
commit b4a79a6890
109 changed files with 5734 additions and 160 deletions

View 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