"""News app common serializers.""" from rest_framework import serializers from account.serializers.common import UserBaseSerializer from location import models as location_models from location.serializers import CountrySimpleSerializer from news import models from tag.serializers import TagBaseSerializer from utils.serializers import TranslatedField, ProjectModelSerializer class NewsTypeSerializer(serializers.ModelSerializer): """News type serializer.""" class Meta: """Meta class.""" model = models.NewsType fields = ('id', 'name') class NewsBaseSerializer(ProjectModelSerializer): """Base serializer for News model.""" # read only fields title_translated = TranslatedField(source='title') subtitle_translated = TranslatedField() # related fields news_type = NewsTypeSerializer(read_only=True) tags = TagBaseSerializer(read_only=True, many=True) class Meta: """Meta class.""" model = models.News fields = ( 'id', 'title_translated', 'subtitle_translated', 'is_highlighted', 'image_url', 'preview_image_url', 'news_type', 'tags', 'slug', ) class NewsDetailSerializer(NewsBaseSerializer): """News detail serializer.""" description_translated = TranslatedField() country = CountrySimpleSerializer(read_only=True) author = UserBaseSerializer(source='created_by', read_only=True) state_display = serializers.CharField(source='get_state_display', read_only=True) class Meta(NewsBaseSerializer.Meta): """Meta class.""" fields = NewsBaseSerializer.Meta.fields + ( 'description_translated', 'start', 'end', 'playlist', 'is_publish', 'state', 'state_display', 'author', 'country', ) class NewsDetailWebSerializer(NewsDetailSerializer): """News detail serializer for web users..""" same_theme = NewsBaseSerializer(many=True, read_only=True) should_read = NewsBaseSerializer(many=True, read_only=True) class Meta(NewsDetailSerializer.Meta): """Meta class.""" fields = NewsDetailSerializer.Meta.fields + ( 'same_theme', 'should_read', ) class NewsBackOfficeBaseSerializer(NewsBaseSerializer): """News back office base serializer.""" class Meta(NewsBaseSerializer.Meta): """Meta class.""" fields = NewsBaseSerializer.Meta.fields + ( 'title', 'subtitle', ) class NewsBackOfficeDetailSerializer(NewsBackOfficeBaseSerializer, NewsDetailSerializer): """News detail serializer for back-office users.""" news_type_id = serializers.PrimaryKeyRelatedField( source='news_type', write_only=True, queryset=models.NewsType.objects.all()) country_id = serializers.PrimaryKeyRelatedField( source='country', write_only=True, queryset=location_models.Country.objects.all()) template_display = serializers.CharField(source='get_template_display', read_only=True) class Meta(NewsBackOfficeBaseSerializer.Meta, NewsDetailSerializer.Meta): """Meta class.""" fields = NewsBackOfficeBaseSerializer.Meta.fields + \ NewsDetailSerializer.Meta.fields + ( 'description', 'news_type_id', 'country_id', 'template', 'template_display', )