Commit 9005819d by Bessie Steinberg

digital book bundle api

parent 0430072c
...@@ -26,6 +26,9 @@ from course_discovery.apps.course_metadata.models import ( ...@@ -26,6 +26,9 @@ from course_discovery.apps.course_metadata.models import (
) )
from course_discovery.apps.course_metadata.search_indexes import CourseIndex, CourseRunIndex, ProgramIndex from course_discovery.apps.course_metadata.search_indexes import CourseIndex, CourseRunIndex, ProgramIndex
import logging
logger = logging.getLogger(__name__)
User = get_user_model() User = get_user_model()
COMMON_IGNORED_FIELDS = ('text',) COMMON_IGNORED_FIELDS = ('text',)
...@@ -955,10 +958,14 @@ class ProgramTypeSerializer(serializers.ModelSerializer): ...@@ -955,10 +958,14 @@ class ProgramTypeSerializer(serializers.ModelSerializer):
class MinimalDigitalBookBundleSerializer(serializers.ModelSerializer): class MinimalDigitalBookBundleSerializer(serializers.ModelSerializer):
courses = MinimalCourseSerializer(many=True, read_only=True)
@classmethod @classmethod
def prefetch_queryset(cls): def prefetch_queryset(cls):
return DigitalBookBundle.objects.all() #TODO: optimize this
return DigitalBookBundle.objects.prefetch_related(
Prefetch('courses', queryset=MinimalCourseSerializer.prefetch_queryset())
)
class Meta: class Meta:
model = DigitalBookBundle model = DigitalBookBundle
...@@ -966,13 +973,16 @@ class MinimalDigitalBookBundleSerializer(serializers.ModelSerializer): ...@@ -966,13 +973,16 @@ class MinimalDigitalBookBundleSerializer(serializers.ModelSerializer):
'uuid', 'uuid',
'title', 'title',
'book_key', 'book_key',
'course' #TODO: return actual course not course id 'courses'
) )
def get_course(self, digital_book_bundle): def get_course(self, digital_book_bundle):
import pdb; pdb.set_trace() import pdb; pdb.set_trace()
pass course_runs = list(digital_book_bundle.course_runs)
logger.info(">>> course_runs: %s", course_runs)
return MinimalCourseSerializer()
class AffiliateWindowSerializer(serializers.ModelSerializer): class AffiliateWindowSerializer(serializers.ModelSerializer):
""" Serializer for Affiliate Window product feeds. """ """ Serializer for Affiliate Window product feeds. """
......
...@@ -115,10 +115,9 @@ class DigitalBookBundleAdmin(admin.ModelAdmin): ...@@ -115,10 +115,9 @@ class DigitalBookBundleAdmin(admin.ModelAdmin):
'id', 'id',
'uuid', 'uuid',
'title', 'title',
'book_key', 'book_key'
'course'
) )
raw_id_fields = ('course',) raw_id_fields = ('courses',)
@admin.register(Program) @admin.register(Program)
......
# -*- coding: utf-8 -*-
# Generated by Django 1.11.3 on 2018-03-07 15:40
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('course_metadata', '0078_merge_20180209_1044'),
('course_metadata', '0078_digitalbookbundle'),
]
operations = [
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.3 on 2018-03-07 22:34
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('course_metadata', '0079_merge_20180307_1540'),
]
operations = [
migrations.RemoveField(
model_name='digitalbookbundle',
name='course',
),
migrations.AddField(
model_name='digitalbookbundle',
name='courses',
field=models.ManyToManyField(blank=True, to='course_metadata.Course'),
),
]
...@@ -934,9 +934,7 @@ class DigitalBookBundle(TimeStampedModel): ...@@ -934,9 +934,7 @@ class DigitalBookBundle(TimeStampedModel):
) )
#TODO: replace with foreign key #TODO: replace with foreign key
book_key = models.CharField(max_length=255) book_key = models.CharField(max_length=255)
#TODO: we may one day want to make this a many to many relationship courses = models.ManyToManyField(Course, blank=True)
#TODO: should it be a course or a course run?
course = models.ForeignKey(Course)
class Program(TimeStampedModel): class Program(TimeStampedModel):
......
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