Commit ea37c12d by Uman Shahzad

Add new serializers and use them in viewsets.

These are the serializers for all 4 new endpoints,
for courses, course runs, programs, and their aggregation.

We add the actual endpoint in the next commit.
parent eb060d31
...@@ -10,7 +10,7 @@ from django.contrib.auth import get_user_model ...@@ -10,7 +10,7 @@ from django.contrib.auth import get_user_model
from django.db.models.query import Prefetch from django.db.models.query import Prefetch
from django.utils.text import slugify from django.utils.text import slugify
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from drf_haystack.serializers import HaystackFacetSerializer, HaystackSerializer from drf_haystack.serializers import HaystackFacetSerializer, HaystackSerializer, HaystackSerializerMixin
from rest_framework import serializers from rest_framework import serializers
from rest_framework.fields import DictField from rest_framework.fields import DictField
from taggit_serializer.serializers import TaggitSerializer, TagListSerializerField from taggit_serializer.serializers import TaggitSerializer, TagListSerializerField
...@@ -128,6 +128,17 @@ class TimestampModelSerializer(serializers.ModelSerializer): ...@@ -128,6 +128,17 @@ class TimestampModelSerializer(serializers.ModelSerializer):
modified = serializers.DateTimeField() modified = serializers.DateTimeField()
class ContentTypeSerializer(serializers.Serializer):
"""Serializer for retrieving the type of content. Useful in views returning multiple serialized models."""
content_type = serializers.SerializerMethodField()
def get_content_type(self, obj):
return obj._meta.model_name
class Meta(object):
fields = ('content_type',)
class NamedModelSerializer(serializers.ModelSerializer): class NamedModelSerializer(serializers.ModelSerializer):
"""Serializer for models inheriting from ``AbstractNamedModel``.""" """Serializer for models inheriting from ``AbstractNamedModel``."""
name = serializers.CharField() name = serializers.CharField()
...@@ -1300,6 +1311,28 @@ class AggregateFacetSearchSerializer(BaseHaystackFacetSerializer): ...@@ -1300,6 +1311,28 @@ class AggregateFacetSearchSerializer(BaseHaystackFacetSerializer):
search_indexes.ProgramIndex: ProgramFacetSerializer, search_indexes.ProgramIndex: ProgramFacetSerializer,
} }
class CourseSearchModelSerializer(HaystackSerializerMixin, ContentTypeSerializer, CourseWithProgramsSerializer):
class Meta(CourseWithProgramsSerializer.Meta):
fields = ContentTypeSerializer.Meta.fields + CourseWithProgramsSerializer.Meta.fields
class CourseRunSearchModelSerializer(HaystackSerializerMixin, ContentTypeSerializer, CourseRunWithProgramsSerializer):
class Meta(CourseRunWithProgramsSerializer.Meta):
fields = ContentTypeSerializer.Meta.fields + CourseRunWithProgramsSerializer.Meta.fields
class ProgramSearchModelSerializer(HaystackSerializerMixin, ContentTypeSerializer, ProgramSerializer):
class Meta(ProgramSerializer.Meta):
fields = ContentTypeSerializer.Meta.fields + ProgramSerializer.Meta.fields
class AggregateSearchModelSerializer(HaystackSerializer):
class Meta:
serializers = {
search_indexes.CourseRunIndex: CourseRunSearchModelSerializer,
search_indexes.CourseIndex: CourseSearchModelSerializer,
search_indexes.ProgramIndex: ProgramSearchModelSerializer,
} }
......
...@@ -93,27 +93,31 @@ class BaseHaystackViewSet(FacetMixin, HaystackViewSet): ...@@ -93,27 +93,31 @@ class BaseHaystackViewSet(FacetMixin, HaystackViewSet):
class CourseSearchViewSet(BaseHaystackViewSet): class CourseSearchViewSet(BaseHaystackViewSet):
facet_serializer_class = serializers.CourseFacetSerializer
index_models = (Course,) index_models = (Course,)
detail_serializer_class = serializers.CourseSearchModelSerializer
facet_serializer_class = serializers.CourseFacetSerializer
serializer_class = serializers.CourseSearchSerializer serializer_class = serializers.CourseSearchSerializer
class CourseRunSearchViewSet(BaseHaystackViewSet): class CourseRunSearchViewSet(BaseHaystackViewSet):
facet_serializer_class = serializers.CourseRunFacetSerializer
index_models = (CourseRun,) index_models = (CourseRun,)
detail_serializer_class = serializers.CourseRunSearchModelSerializer
facet_serializer_class = serializers.CourseRunFacetSerializer
serializer_class = serializers.CourseRunSearchSerializer serializer_class = serializers.CourseRunSearchSerializer
class ProgramSearchViewSet(BaseHaystackViewSet): class ProgramSearchViewSet(BaseHaystackViewSet):
document_uid_field = 'uuid' document_uid_field = 'uuid'
lookup_field = 'uuid' lookup_field = 'uuid'
facet_serializer_class = serializers.ProgramFacetSerializer
index_models = (Program,) index_models = (Program,)
detail_serializer_class = serializers.ProgramSearchModelSerializer
facet_serializer_class = serializers.ProgramFacetSerializer
serializer_class = serializers.ProgramSearchSerializer serializer_class = serializers.ProgramSearchSerializer
class AggregateSearchViewSet(BaseHaystackViewSet): class AggregateSearchViewSet(BaseHaystackViewSet):
""" Search all content types. """ """ Search all content types. """
detail_serializer_class = serializers.AggregateSearchModelSerializer
facet_serializer_class = serializers.AggregateFacetSearchSerializer facet_serializer_class = serializers.AggregateFacetSearchSerializer
serializer_class = serializers.AggregateSearchSerializer serializer_class = serializers.AggregateSearchSerializer
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment