Переопределить вывод jsona Django Rest Framework
Есть сериализатор, мне нужно изменить вывод JSONa
class NewsListSerializer (serializers.ModelSerializer):
"""Список новостей"""
class Meta:
model = News
fields = ('id', 'title', 'body_text_preview','image', 'created_at')
def to_representation(self, obj):
return {
'id': obj.id,
'title': obj.title,
'body_text_preview': obj.body_text_preview,
'image': obj.image,
"create_at": {
# вместо "created_at": "2020-07-03 14:01:17"
# разложить формат дататайма на день месяц год
"day": self.getDay,
"month": self.getMonth,
"year": self.getYear,
},
}
def getDay(self):
return '03'
def getMonth(self):
return '07'
def getYear(self):
return '2020'
Ругается на UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Ответы (2 шт):
Автор решения: Андрей Иванов
→ Ссылка
Вот так всё работает как надо:
def to_representation(self, instance):
representation = super().to_representation(instance)
representation['created_at'] = [
{"year": instance.created_at.strftime("%Y"),
"month": instance.created_at.strftime("%m"),
"day": instance.created_at.strftime("%d")}
]
return representation
Автор решения: 5c0rp
→ Ссылка
class NewsListSerializer (serializers.ModelSerializer):
"""Список новостей"""
created_at = serializers.SerializerMethodField()
class Meta:
model = News
fields = ('id', 'title', 'body_text_preview','image', 'created_at')
def get_created_at(self, instance):
return {
"year": instance.created_at.strftime("%Y"),
"month": instance.created_at.strftime("%m"),
"day": instance.created_at.strftime("%d")
}