def modify_course(self, request, pk=None):
semester = self.get_object()
search_kwargs = {}
course_name = ''
if 'course_id' in request.query_params:
course_name = request.query_params['course_id']
search_kwargs['course_id'] = course_name
elif 'short_name' in request.query_params:
course_name = request.query_params['short_name']
short_name = COURSE_RE.match(course_name)
if not short_name:
raise NotAcceptable(detail='short_name field does not match pattern.')
search_kwargs['number'] = short_name.group('num')
search_kwargs['department'] = short_name.group('dept')
if short_name.group('letter'):
search_kwargs['letter'] = short_name.group('letter')
else:
raise NotAcceptable(detail='short_name or course_id parameter required.')
try:
course = Course.objects.get(**search_kwargs)
except Course.DoesNotExist:
raise NotFound('Course "%s" not found.' % course_name)
if request.method == 'POST':
# check if already there, and if so, raise 409
if semester.courses.filter(id=course.id).exists():
raise ContentError('Course "%s" already in semester.' % course_name)
semester.courses.add(course)
elif request.method == 'DELETE':
if not semester.courses.filter(id=course.id).exists():
raise ContentError('Course "%s" not in semester.' % course_name)
semester.courses.remove(course)
genie.clear_cached_recommendations(semester.calendar.profile_id)
serializer = CourseSerializer(course)
return Response(serializer.data)
评论列表
文章目录