back office news reformat
This commit is contained in:
parent
61eca800fc
commit
f3c48281d4
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user