Q:

Django REST, serializing variable/multiple nested OnetoOne relationship

Apologies if the title is unclear as to what the issue is, I'm unsure how to describe it.
I have a "parent" survey model which holds my general fields which all surveys have in common.
class Survey(models.Model):
    ...

However depending on the type of survey, additional/different fields are required
class SurveyA(models.Model):
    survey = models.OneToOneField(
        Survey,
        on_delete=models.CASCADE,
        primary_key=True
    )
    fieldA = models.TextField()

class SurveyB(models.Model):
    survey = models.OneToOneField(
        Survey,
        on_delete=models.CASCADE,
        primary_key=True
    )
    fieldC = models.TextField()

class SurveyN(models.Model):
    survey = models.OneToOneField(
        Survey,
        on_delete=models.CASCADE,
        primary_key=True
    )
    fieldN = models.TextField()

When I serialize a "Survey" object into json, I would like the corresponding SurveryA,B..N object to be serialized along with it, regardless of which type of sub survey is related back in the OnetoOneField. Is this doable? 
Expected output when serializing all Survey models:
[
    {
        "id": 1,
        "SurveyA": {
            "fieldA": "this is an 'A' type Survey",
        }
    },
    {
        "id": 2,
        "SurveyB": {
            "fieldB": "this is an 'B' type Survey",
        }
    },
    {
        "id": 3,
        "SurveyN": {
            "fieldN": "this is an 'N' type Survey",
        }
    }
]

A:

Found a solution using SerializeMethodField, if anyone has any other suggestion it would be much appreciated.
Idea from Django Rest Framework Conditional Field on Serializer
class SurveySerializer(serializers.HyperlinkedModelSerializer):
    survey_type = serializers.SerializerMethodField()
    class Meta:
        model = Survey
        fields = '__all__'

    def get_survey_type(self, obj):
        if SurveyA.objects.filter(pk=obj.pk).exists():
            survey_type = SurveyASerializer(SurveyA.objects.get(pk=obj.pk), context=self.context)
        elif SurveyB.objects.filter(pk=obj.pk).exists():
            survey_type = SurveyBSerializer(SurveyB.objects.get(pk=obj.pk), context=self.context)
        elif SurveyN.objects.filter(pk=obj.pk).exists():
            survey_type = SurveyNSerializer(SurveyN.objects.get(pk=obj.pk), context=self.context)
        return survey_type.data

Note: context=self.context must be passed because I'm working with hyperlinked models.

