Сохранение Nested Django Сериализатор - PullRequest
0 голосов
/ 17 февраля 2020

у меня 3 модели. Question, Choice и Cover. Вопрос может иметь много вариантов, и каждый вариант может иметь только 1 обложку. Я реализовал Question и Choice в качестве сериализаторов, и он успешно работал, теперь я пытаюсь добавить Cover. Вот что у меня есть:

class CreateQuestionSerializer(serializers.ModelSerializer):
    choice_set = ChoiceSerializer(many=True)

    class Meta:
        model = Question
        fields = ('user', 'status', 'choice_set')

    def create(self, validated_data):
        choices_validated_data = validated_data.pop('choice_set')
        question = Question.objects.create(**validated_data)
        choices_serializer = self.fields['choice_set']

        for choice in choices_validated_data:
            choice['question'] = question
        choices_serializer.create(choices_validated_data)
        return question

class ChoiceSerializer(serializers.ModelSerializer):
    choice_cover = ChoiceCoverSerializer(many=False)

    class Meta:
        model = Choice
        fields = ('choice', 'choice_cover')


class ChoiceCoverSerializer(serializers.ModelSerializer):
    class Meta:
        model = ChoiceCover
        fields = ('cover',)

Когда я пытаюсь сохранить данные следующим образом:

{
    "user": 179,
    "question": "Who will win the election?",
    "choice_set": [
      {
        "choice": "Lorem",
        "choice_cover": "C4FF33"
      },
      {
        "choice": "Ipsum",
        "choice_cover": "FF5733"
      }
     ]
}

Я получаю следующую ошибку:

{
    "choice_set": [
        {
            "choice_cover": {
                "non_field_errors": [
                    "Invalid data. Expected a dictionary, but got str."
                ]
            }
        },
        {
            "choice_cover": {
                "non_field_errors": [
                    "Invalid data. Expected a dictionary, but got str."
                ]
            }
        }
    ]
}

Как я могу исправить это?

...