为外键的外键创建序列化程序

时间:2020-03-07 20:44:14

标签: django django-models django-rest-framework

我有3个模型。 QuestionChoiceChoiceColor

class Question(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    question= models.CharField(max_length=200)

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice = models.CharField(max_length=120)
    vote_count = models.IntegerField(default=0)

class ChoiceColor(models.Model):
    choice = models.OneToOneField(Choice, on_delete=models.CASCADE, null=True)
    color = models.CharField(max_length=7)

我有一个看起来像这样的序列化器:

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 ChoiceColorSerializer(serializers.ModelSerializer):
    class Meta:
        model = ChoiceColor
        fields = ('color',)


class ChoiceSerializer(serializers.ModelSerializer):
    color_set = ChoiceColorSerializer(many=False)

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

由于某种原因,当我输入数据时,它不起作用。我需要为ChoiceSerializer定义一个create方法,但是我不确定该怎么做?

0 个答案:

没有答案