вам нужно будет использовать поле метода в сериализаторе и добавить его как поле exptra в мета-класс класса, чтобы получить полный список и подкатегорию:
serializer.py
class courseserializer(serializers.ModelSerializer):
class Meta:
model = course
fields = '__all__'
class semesterserilizer(serializers.ModelSerializer):
course=serializers.SerializerMethodField()
class Meta:
model = course
fields = ['name','course']
def get_course(self,obj):
queryset=course.objects.filter(id=obj.id)
return courseserializer(queryset,many=True).data
То же самое вы должны сделать с программой, чтобы получить и сериализатор внутри программы, и, в поле зрения, передать набор запросов в родительский серилизатор, который будет извлекать соответствующие данные, как мы указали в серилизаторе.