102 lines
2.7 KiB
Python
102 lines
2.7 KiB
Python
"""News app common serializers."""
|
|
from rest_framework import serializers
|
|
from location import models as location_models
|
|
from location.serializers import CountrySimpleSerializer
|
|
from main.serializers import MetaDataContentSerializer
|
|
from news import models
|
|
from utils.serializers import TranslatedField
|
|
|
|
|
|
class NewsTypeSerializer(serializers.ModelSerializer):
|
|
"""News type serializer."""
|
|
|
|
class Meta:
|
|
"""Meta class."""
|
|
|
|
model = models.NewsType
|
|
fields = ('id', 'name')
|
|
|
|
|
|
class NewsBaseSerializer(serializers.ModelSerializer):
|
|
"""Base serializer for News model."""
|
|
|
|
# read only fields
|
|
title_translated = TranslatedField()
|
|
subtitle_translated = TranslatedField()
|
|
|
|
# related fields
|
|
news_type = NewsTypeSerializer(read_only=True)
|
|
tags = MetaDataContentSerializer(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)
|
|
|
|
class Meta(NewsBaseSerializer.Meta):
|
|
"""Meta class."""
|
|
|
|
fields = NewsBaseSerializer.Meta.fields + (
|
|
'description_translated',
|
|
'start',
|
|
'end',
|
|
'playlist',
|
|
'is_publish',
|
|
'author',
|
|
'country',
|
|
)
|
|
|
|
|
|
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())
|
|
|
|
class Meta(NewsBackOfficeBaseSerializer.Meta, NewsDetailSerializer.Meta):
|
|
"""Meta class."""
|
|
|
|
fields = NewsBackOfficeBaseSerializer.Meta.fields + \
|
|
NewsDetailSerializer.Meta.fields + (
|
|
'description',
|
|
'news_type_id',
|
|
'country_id',
|
|
)
|
|
|