from rest_framework import serializers from gallery import models as gallery_models from location.models import Address from location.serializers import AddressSerializer from news import models class NewsTypeSerializer(serializers.ModelSerializer): """News type serializer.""" class Meta: model = models.NewsType fields = [ 'id', 'name' ] class NewsLocalizationMixinSerializer(serializers.ModelSerializer): """Serializer for localized fields""" # Localized fields title_trans = serializers.CharField(read_only=True) subtitle_trans = serializers.CharField(read_only=True) description_trans = serializers.CharField(read_only=True) class NewsSerializer(NewsLocalizationMixinSerializer): """News serializer.""" address = AddressSerializer() image_url = serializers.SerializerMethodField() class Meta: model = models.News fields = [ 'id', 'news_type', 'start', 'end', 'playlist', 'address', 'is_highlighted', 'image_url', # Localized fields 'title_trans', 'subtitle_trans', 'description_trans', ] def get_image_url(self, obj): """Return absolute image URL""" return obj.image.get_full_image_url(request=self.context.get('request')) class NewsCreateUpdateSerializer(NewsSerializer): """News update serializer.""" title = serializers.JSONField() subtitle = serializers.JSONField() description = serializers.JSONField() image = serializers.PrimaryKeyRelatedField( queryset=gallery_models.Image.objects.all(), required=True,) news_type = serializers.PrimaryKeyRelatedField( queryset=models.NewsType.objects.all(), write_only=True) address = serializers.PrimaryKeyRelatedField( queryset=Address.objects.all(), write_only=True) class Meta: model = models.News read_only_fields = [ 'id' ] fields = [ 'id', 'news_type', 'title', 'subtitle', 'description', 'start', 'end', 'playlist', 'address', 'image', 'is_publish', 'country' ]