From aaad64dc39d2646190a7e8145559ee5c999011f8 Mon Sep 17 00:00:00 2001 From: Josh Washburne Date: Mon, 2 Apr 2018 16:54:53 -0400 Subject: [PATCH] Different serializers for different actions. --- savepointradio/api/serializers/radio.py | 18 +++++++++++++++--- savepointradio/api/views/radio.py | 13 ++++++++++++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/savepointradio/api/serializers/radio.py b/savepointradio/api/serializers/radio.py index 521da61..25b6d02 100644 --- a/savepointradio/api/serializers/radio.py +++ b/savepointradio/api/serializers/radio.py @@ -27,10 +27,22 @@ class GameSerializer(serializers.ModelSerializer): fields = ('id', 'title') -class SongSerializer(serializers.ModelSerializer): - artists = ArtistFullnameSerializer(many=True) - +class SongCreateSerializer(serializers.ModelSerializer): class Meta: model = Song fields = ('id', 'album', 'artists', 'published_date', 'game', 'num_played', 'last_played', 'length', 'song_type', 'title') + + def create(self, validated_data): + artists_data = validated_data.pop('artists') + song = Song.objects.create(**validated_data) + print(artists_data) + for artist_data in artists_data: + print(artist_data) + song.artists.add(artist_data) + song.save() + return song + + +class SongSerializer(SongCreateSerializer): + artists = ArtistFullnameSerializer(many=True) diff --git a/savepointradio/api/views/radio.py b/savepointradio/api/views/radio.py index 7b043d6..e0140f1 100644 --- a/savepointradio/api/views/radio.py +++ b/savepointradio/api/views/radio.py @@ -3,7 +3,8 @@ from rest_framework import viewsets from radio.models import Album, Artist, Game, Song from ..permissions import IsAdminOrReadOnly from ..serializers.radio import (AlbumSerializer, ArtistSerializer, - GameSerializer, SongSerializer) + GameSerializer, SongSerializer, + SongCreateSerializer) class AlbumViewSet(viewsets.ModelViewSet): @@ -28,3 +29,13 @@ class SongViewSet(viewsets.ModelViewSet): permission_classes = [IsAdminOrReadOnly] queryset = Song.objects.all() serializer_class = SongSerializer + + def get_serializer_class(self): + ''' + Choose a different serializer based on what action is chosen. + + (Thanks to https://stackoverflow.com/questions/22616973/) + ''' + if self.action == 'create': + return SongCreateSerializer + return SongSerializer