from rest_framework import serializers
from .models import Playlist, Track, Favorite

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = '__all__'

class PlaylistSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True)

    class Meta:
        model = Playlist
        fields = ('id', 'playlist_name', 'user_id', 'tracks')

    def create(self, validated_data):
        tracks_data = validated_data.pop('tracks')
        playlist = Playlist.objects.create(**validated_data)

        for track_data in tracks_data:
            Track.objects.create(**track_data)
        return playlist 

    def update(self, instance, validated_data):
        tracks_data = validated_data.pop('tracks')
        instance.playlist_name = validated_data.get('playlist_name', instance.playlist_name)
        instance.save()
        Track.objects.filter(playlist=instance.id).delete()

        for track_data in tracks_data:
            Track.objects.create(**track_data)
            instance.tracks.add(track_id)

        instance.save()
        return Playlist.objects.get(pk=instance.id)
        

class FavoriteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Favorite 
        fields = '__all__' 


from rest_framework import serializers
from .models import Playlist, Track, Favorite

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = '__all__'

class PlaylistSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True)

    class Meta:
        model = Playlist
        fields = ('id', 'playlist_name', 'user_id', 'tracks')

    def create(self, validated_data):
        tracks_data = validated_data.pop('tracks')
        playlist = Playlist.objects.create(**validated_data)

        for track_data in tracks_data:
            Track.objects.create(**track_data)
        return playlist 

    def update(self, instance, validated_data):
        tracks_data = validated_data.pop('tracks')
        instance.playlist_name = validated_data.get('playlist_name', instance.playlist_name)
        instance.save()
        Track.objects.filter(playlist=instance.id).delete()

        for track_data in tracks_data:
            track_id = Track.objects.create(**track_data)
            instance.tracks.add(track_id)

        instance.save()
        return Playlist.objects.get(pk=instance.id)
        

class FavoriteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Favorite 
        fields = '__all__' 


Add tracks to playlist on update
Add tracks to playlist on update

  from rest_framework import serializers
  from .models import Playlist, Track, Favorite
  
  class TrackSerializer(serializers.ModelSerializer):
      class Meta:
          model = Track
          fields = '__all__'
  
  class PlaylistSerializer(serializers.ModelSerializer):
      tracks = TrackSerializer(many=True)
  
      class Meta:
          model = Playlist
          fields = ('id', 'playlist_name', 'user_id', 'tracks')
  
      def create(self, validated_data):
          tracks_data = validated_data.pop('tracks')
          playlist = Playlist.objects.create(**validated_data)
  
          for track_data in tracks_data:
              Track.objects.create(**track_data)
          return playlist 
  
      def update(self, instance, validated_data):
          tracks_data = validated_data.pop('tracks')
          instance.playlist_name = validated_data.get('playlist_name', instance.playlist_name)
          instance.save()
          Track.objects.filter(playlist=instance.id).delete()
  
          for track_data in tracks_data:
-             Track.objects.create(**track_data)
+             track_id = Track.objects.create(**track_data)
              instance.tracks.add(track_id)
  
          instance.save()
          return Playlist.objects.get(pk=instance.id)
          
  
  class FavoriteSerializer(serializers.ModelSerializer):
      class Meta:
          model = Favorite 
          fields = '__all__' 
  
  
Add tracks to playlist on update
## Code Before:
from rest_framework import serializers
from .models import Playlist, Track, Favorite

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = '__all__'

class PlaylistSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True)

    class Meta:
        model = Playlist
        fields = ('id', 'playlist_name', 'user_id', 'tracks')

    def create(self, validated_data):
        tracks_data = validated_data.pop('tracks')
        playlist = Playlist.objects.create(**validated_data)

        for track_data in tracks_data:
            Track.objects.create(**track_data)
        return playlist 

    def update(self, instance, validated_data):
        tracks_data = validated_data.pop('tracks')
        instance.playlist_name = validated_data.get('playlist_name', instance.playlist_name)
        instance.save()
        Track.objects.filter(playlist=instance.id).delete()

        for track_data in tracks_data:
            Track.objects.create(**track_data)
            instance.tracks.add(track_id)

        instance.save()
        return Playlist.objects.get(pk=instance.id)
        

class FavoriteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Favorite 
        fields = '__all__' 


## Instruction:
Add tracks to playlist on update
## Code After:
from rest_framework import serializers
from .models import Playlist, Track, Favorite

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = '__all__'

class PlaylistSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True)

    class Meta:
        model = Playlist
        fields = ('id', 'playlist_name', 'user_id', 'tracks')

    def create(self, validated_data):
        tracks_data = validated_data.pop('tracks')
        playlist = Playlist.objects.create(**validated_data)

        for track_data in tracks_data:
            Track.objects.create(**track_data)
        return playlist 

    def update(self, instance, validated_data):
        tracks_data = validated_data.pop('tracks')
        instance.playlist_name = validated_data.get('playlist_name', instance.playlist_name)
        instance.save()
        Track.objects.filter(playlist=instance.id).delete()

        for track_data in tracks_data:
            track_id = Track.objects.create(**track_data)
            instance.tracks.add(track_id)

        instance.save()
        return Playlist.objects.get(pk=instance.id)
        

class FavoriteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Favorite 
        fields = '__all__' 

