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
I had this issue like this, you can use serializer.SerializerMethodField() and write a serializer for test with isinstance(). For example:
You can check this and if it doesn't work let me know:)