from rest_framework import serializers from collection import models from location import models as location_models from utils.serializers import TranslatedField from main.models import SiteSettings from main.serializers import SiteShortSerializer class CollectionBaseSerializer(serializers.ModelSerializer): """Collection base serializer""" name_translated = TranslatedField() description_translated = TranslatedField() class Meta: model = models.Collection fields = [ 'id', 'name_translated', 'description_translated', 'image_url', 'slug', ] class CollectionSerializer(CollectionBaseSerializer): """Collection serializer""" # COMMON block_size = serializers.JSONField() is_publish = serializers.BooleanField() on_top = serializers.BooleanField() slug = serializers.SlugField(allow_blank=False, required=True, max_length=50) # REQUEST start = serializers.DateTimeField(write_only=True) end = serializers.DateTimeField(write_only=True) country = serializers.PrimaryKeyRelatedField( queryset=location_models.Country.objects.all(), write_only=True) class Meta(CollectionBaseSerializer.Meta): fields = CollectionBaseSerializer.Meta.fields + [ 'start', 'end', 'is_publish', 'on_top', 'country', 'block_size', ] class GuideTypeBaseSerializer(serializers.ModelSerializer): """GuideType serializer.""" class Meta: """Meta class.""" model = models.GuideType fields = [ 'id', 'name', ] class GuideBaseSerializer(serializers.ModelSerializer): """Guide serializer""" state_display = serializers.CharField(source='get_state_display', read_only=True) guide_type = GuideTypeBaseSerializer(allow_null=True, read_only=True) guide_type_id = serializers.PrimaryKeyRelatedField( queryset=models.GuideType.objects.all(), write_only=True) site = SiteShortSerializer(read_only=True) site_id = serializers.PrimaryKeyRelatedField( queryset=SiteSettings.objects.all(), write_only=True) entities = serializers.DictField(read_only=True) class Meta: model = models.Guide fields = [ 'id', 'name', 'start', 'end', 'vintage', 'slug', 'guide_type', 'guide_type_id', 'site', 'site_id', 'state', 'state_display', 'entities', ] extra_kwargs = { 'state': {'write_only': True}, }