#python-3.x #django #serialization #django-rest-framework #django-serializer
#python-3.x #django #сериализация #django-rest-framework #django-сериализатор
Вопрос:
У меня есть простой сериализатор:
class BoxSerializer(Serializer):
modelName = serializers.CharField(required=True)
body = ???
И я хочу сериализовать поле ‘body’ в зависимости от поля ‘ModelName’. Например, если имямоДели равно ‘Phone’, то я хочу использовать PhoneSerializer для поля ‘body’. Если ModelName ‘book’ я хочу использовать BookSerializer и так далее. Как я могу это реализовать?
Пожалуйста, обратите внимание, что я не собираюсь ничего сохранять в базе данных
Ответ №1:
Для лучшей практики вы можете реализовать :
class BoxSerializer(Serializer):
modelName = serializers.CharField(required=True)
body = serializers.SerializerMethodField()
def get_body(self,box):
if box.modelName == "x":
return XSerializer(box.body)
elif box.modelName == "y":
return YSerializer(box.body)
Ответ №2:
Попробуйте что-то подобное, получите значение поля, а затем выберите сериализатор внутри if else
блока:
@api_view(['GET', 'POST'])
def serialize(request, pk):
box = Box.objects.get(pk=pk)
if box.modelName = 'x':
serializer = BoxSerializerX(box)
else:
serializer = BoxSerializerY(box)
return Response(serializer.data)
Комментарии:
1. Для этого вам понадобится пара сериализаторов (очевидно)