Creating serializer for foreign key of foreign key

28 views
Skip to first unread message

Sam

unread,
Mar 7, 2020, 4:02:59 PM3/7/20
to Django users

I have 3 models. QuestionChoice, and ChoiceColor.


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)

I have a serializer that looks like this:


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
And another that looks like this:
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')

For some reason, when I put in the data it does not work. I need to define a create method for ChoiceSerializer but i'm unsure how to do that?


Reply all
Reply to author
Forward
0 new messages