У меня проблема с пониманием того, как работает сериализатор, может быть, кто-то может помочь мне объяснить рабочий процесс. У меня есть следующий сериализатор:
import ast
from rest_framework import serializers
from .models import Speaker
class SpeakerSerializer(serializers.ModelSerializer):
# title = serializers.SerializerMethodField('title')
fullName = serializers.SerializerMethodField()
class Meta:
fields = ("id", "image", "fullName", "title")
model = Speaker
# def get_title(self, obj):
# return {'ro': obj.title_ro, 'ru': obj.title_ru, 'en': obj.title_en}
def get_fullName(self, obj):
return {'ro': obj.fullName_ro, 'ru': obj.fullName_ru, 'en': obj.fullName_en}
def create(self, validated_data):
print(validated_data)
title = ast.literal_eval(validated_data.get('title')).get('en', None)
title_ru = ast.literal_eval(validated_data.get('title')).get('ru', None)
title_ro = ast.literal_eval(validated_data.get('title')).get('ro', None)
fullName = ast.literal_eval(validated_data.get('fullName')).get('en', None)
fullName_ru = ast.literal_eval(validated_data.get('fullName')).get('ru', None)
fullName_ro = ast.literal_eval(validated_data.get('fullName')).get('ro', None)
image = validated_data.get('image')
speaker = Speaker(title=title, title_ro=title_ro, title_ru=title_ru, fullName=fullName, fullName_ro=fullName_ro,
fullName_ru=fullName_ru, image=image)
speaker.save()
return speaker
с почтальоном, которого я отправляю 'title' = {'ro': 'something', 'ru': 'something'}
, но когда я печатаю vlidated_data, я получаю только изображение без 'title', если я раскомментирую title = serializers.SerializerMethodField('title')
. Я должен сказать, что без title = serializers.SerializerMethodField('title')
fullName = serializers.SerializerMethodField()
все работает нормально, но мне нужно это для пользовательского ответа, подобного этому
{
"data": [
{
"id": 21,
"image": null,
"fullName": {
"ro": "something",
"ru": "something",
"en": null
},
"title": {
"ro": "something",
"ru": "something",
"en": null
}
}
],
"meta": {
"nextPage": null,
"previousPage": null,
"total": 1,
"page": 1,
"perPage": 10
}
}