gault-millau/apps/news/serializers/common.py

85 lines
2.3 KiB
Python

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'
]