Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 23131

DRF: Serialize field with different serializers and many=True

$
0
0

I have the following models in my django rest framework app:

class Question(models.Model):    class Type(models.TextChoices):        TEXT = 'text', 'text question'        RADIO = 'radio', 'choosing one option quesiton'        CHOICE = 'check', 'choosing multiple options question'    type = models.CharField(max_length=5, choices=Type.choices)    title = models.CharField()    description = models.TextField(blank=True, default='')    def __str__(self) -> str:        return f'{self.type}: {self.title}'class TextQuestion(Question):    answer = models.CharField()class RadioQuestion(Question):    variants = fields.ArrayField(models.CharField())    answer = models.CharField()class ChoiceQuestion(Question):    variants = fields.ArrayField(models.CharField())    answers = fields.ArrayField(models.CharField())class Test(models.Model):    name = models.CharField()    creator = models.ForeignKey(User, on_delete=models.CASCADE)    questions = models.ManyToManyField(Question)```

I want to write serializer for test serialization, but I dont know how to serialize questions field. Because I have different serializer for every question type:What should I do? Maybe it`s better to reorganize my models somehow?

I already writed serializers for all question types:

class TextQuestionSerializer(serializers.ModelSerializer):    class Meta:        model = TextQuestion        fields = '__all__'class RadioQuestionSerializer(serializers.ModelSerializer):    class Meta:        model = RadioQuestion        fields = '__all__'class ChoiceQuestionSerializer(serializers.ModelSerializer):    class Meta:        model = ChoiceQuestion        fields = '__all__'

I thought about using serializer.SerializerMethodField() but it this doesnt work with many=True


Viewing all articles
Browse latest Browse all 23131

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>