Как в serializers вывести поля из дочерних моделей

Всем доброго дня! У меня есть следующая проблема. Я пишу проект с выводом разного типа контента. Модели реализованы следующим образом:

from django.db import models
from django.shortcuts import reverse


class Page(models.Model):
    title = models.CharField(verbose_name='Название', max_length=65)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Страница'
        verbose_name_plural = 'Страницы'

    def get_absolute_url(self):
        return reverse('detail_content', kwargs={'pk': self.pk})


class Content(models.Model):
    title = models.CharField(verbose_name='Название', max_length=65)
    counter = models.PositiveIntegerField(verbose_name='Кол-во просмотров', default=0)
    page = models.ForeignKey(Page, verbose_name='Страница', on_delete=models.CASCADE, related_name='content')
    position = models.PositiveSmallIntegerField(verbose_name='Позиция', default=0)

    def __str__(self):
        return self.title


class VideoContent(Content):
    video_link = models.CharField(verbose_name='Ссылка на видео', max_length=2048)  # Такая большая макс.длина поля
    sub_link = models.CharField(verbose_name='Ссылка на субтитры', max_length=2048,  # на случай очень длиной ссылки
                                blank=True, null=True)

    class Meta:
        verbose_name = 'Видеофайл'
        verbose_name_plural = 'Видеофайлы'


class AudioContent(Content):
    bpm = models.PositiveSmallIntegerField(verbose_name='Кол-во bpm')

    class Meta:
        verbose_name = 'Аудиофайл'
        verbose_name_plural = 'Аудиофайлы'


class TextContent(Content):
    text = models.TextField(verbose_name='Текст')

    class Meta:
        verbose_name = 'Текст'
        verbose_name_plural = 'Тексты'

У нас есть модель Page, в которой кроме тайтла ничего нет, есть модель Content, которая по FK связана с ней. От Content наследуются модели с типами контента (Видео, аудио, текст). В данный момент пытаюсь вывести в serializers детальную информацию о выбранной странице, но у меня вывод не такой, какой я ожидаю

Вот, собственно сериализаторы:

from rest_framework import serializers

from .models import Page, Content


class PageListSerializer(serializers.ModelSerializer):

    def get_link(self, obj):
        return 'http://127.0.0.1:8000' + obj.get_absolute_url()

    link = serializers.SerializerMethodField()

    class Meta:
        model = Page
        fields = ('pk', 'link')


class ContentSerializer(serializers.ModelSerializer):

    class Meta:
        model = Content
        fields = '__all__'


class PageDetailSerializer(serializers.ModelSerializer):

    content = ContentSerializer(source='content.all', many=True)

    class Meta:
        model = Page
        fields = ('pk', 'title', 'content')

Но вместо всех ссылок, текстов и т.д я получаю вот такой ответ:

{
    "pk": 1,
    "title": "Страница 1",
    "content": [
        {
            "id": 1,
            "title": "Видео 1",
            "counter": 0,
            "position": 1,
            "page": 1
        },
        {
            "id": 2,
            "title": "Аудио 1",
            "counter": 0,
            "position": 3,
            "page": 1
        },
        {
            "id": 3,
            "title": "Текст 1",
            "counter": 0,
            "position": 2,
            "page": 1
        }
    ]
}

Как я могу получить поля из дочерних моделей, ссылаясь только на родительскую? Или может есть еще какой-либо способ?

Вернуться на верх