Different serializers for different actions.
This commit is contained in:
parent
ddbcf5c96f
commit
aaad64dc39
2 changed files with 27 additions and 4 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue