diff --git a/apps/news/models.py b/apps/news/models.py index 0396c441..c7785f45 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -367,6 +367,17 @@ class News(GalleryMixin, BaseAttributes, TranslatedFieldsMixin, HasTagsMixin, {f'{crop[len(f"{model_name}_"):]}_url': image.get_image_url(crop)}) return image_property + @property + def descriptions(self): + """Read-only list field for backoffice news representation""" + return [{ + 'locale': locale, + 'slug': (self.slugs or {}).get(locale), + 'status': 'active' if (self.locale_to_description_is_active or {}).get(locale) else 'inactive', + 'title': (self.title or {}).get(locale), + 'text': desc + } for locale, desc in self.description.items()] if self.description else [] + class NewsGallery(IntermediateGalleryModelMixin): news = models.ForeignKey(News, null=True, diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 0640b15a..e3ffd01f 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -178,6 +178,7 @@ class NewsDetailWebSerializer(NewsDetailSerializer): class NewsBackOfficeBaseSerializer(NewsBaseSerializer): """News back office base serializer.""" is_published = serializers.BooleanField(source='is_publish', read_only=True) + descriptions = serializers.ListField(required=False) class Meta(NewsBaseSerializer.Meta): """Meta class.""" @@ -195,6 +196,7 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): 'publication_time', 'created', 'modified', + 'descriptions', ) extra_kwargs = { 'created': {'read_only': True}, @@ -204,6 +206,22 @@ class NewsBackOfficeBaseSerializer(NewsBaseSerializer): 'must_of_the_week': {'read_only': True}, } + def validate(self, attrs): + """Overridden validate method.""" + if 'descriptions' in attrs: + descriptions = attrs.pop('descriptions') + status_to_bool = { + 'active': True, + 'inactive': False, + } + attrs['slugs'] = {obj['locale']: obj['slug'] for obj in descriptions} + attrs['title'] = {obj['locale']: obj['title'] for obj in descriptions} + attrs['locale_to_description_is_active'] = { + obj['locale']: status_to_bool[obj['status']] for obj in descriptions + } + attrs['description'] = {obj['locale']: obj['text'] for obj in descriptions} + return attrs + def create(self, validated_data): slugs = validated_data.get('slugs')