В настоящее время у меня есть следующий сериализатор:
serializers.py
class SurfGroupSerializer(serializers.ModelSerializer):
instructor = SurfInstructorSerializer(many=False)
surfers = SurferSerializer(many=True)
class Meta:
model = SurfGroup
fields = ['uuid', 'instructor', 'date', 'starting_time', 'ending_time', 'surfers']
def create(self, validated_data):
return SurfGroup(**validated_data)
и следующий метод создания набора (набор просмотра унаследован от viewsets.ViewSet
, так как нам нужна индивидуальная настройка, дополнительные сигналыи действия и т.д.):
viewsets.py
# Surf Group Create View:
def create(self, request, format=None):
serializer = SurfGroupSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
response = responses.standardized_json_response(
message='Surf Group Objects Have Been Successfully Created',
data=serializer.data
)
return Response(data=response, status=status.HTTP_201_CREATED, headers=headers)
Для действия извлечения сериализатор работает хорошо, и у нас есть вложенный объект instructor
в ответе. Однако я хочу выполнить создание, передав инструктору uuid
attrbiute like (см. Содержание в текстовой области POST):
Вместоцелый объект ... мне было интересно, как мы этого добиваемся? Разве лучше всего иметь два сериализатора, один для выполнения создания и один для извлечения?
def create(self, validated_data):
surf_group = SurfGroup(
instructor__uuid=validated_data['instructor'],
)
surf_group.save()
return surf_group