request받은거에서 일부는 바로 정보로 입력되고, 일부는 그걸로 연결연결해서 해시태그를 알아내서 또 따로 추가해야해서 어려웠다
title, des는 바로 저장
(playlist_audio 삭제한 Request생성: 삭제 안하고 넘기면 Dict이 넘어왔다고 오류뜸..)
Request=request.data.copy()
Request.pop('playlist_audio')
serializer = NewPlaylistSerializer(data=Request)
playlist_id로는 원래 플리에 접근해서 해시태그 가져오기
base_pli=get_object_or_404(Playlist, playlist_id=request.data['playlist_id'])
base_hashtag=list(base_pli.hashtag.all())
playlist_audio에서는 audio_id들 뽑아내서 Audio객체로 만들어 따로 저장
playlist_audios=request.data['playlist_audio']
첫번째 오디오는 따로 빼서 저장
first_audio_id = playlist_audios[0]['audio_id']
first_audio=get_object_or_404(Audio,audio_id=first_audio_id)
저장 + 아까 안넘긴 데이터 값들 추가..
newpli=serializer.save(mypli_user = request.user,first_audio=first_audio)
해시태그, 포함된 오디오들 저장하기 위해서는
newpli=serializer.save(mypli_user = request.user,first_audio=first_audio)
serializer.save를 새로운 변수로 받고(다른때에는 안받아도됨) newpli.playlist_audio.add(audioA)
views.py
class NewPlaylistView(views.APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
# request에서 playlist_audio 삭제한 Request생성: 삭제 안하고 넘기면 Dict이 넘어왔다고 오류뜸
Request=request.data.copy()
Request.pop('playlist_audio')
# 오디오들: playlist_audio데이터 뽑아냄
playlist_audios=request.data['playlist_audio']
# 첫번째 오디오: playlist_audio데이터의 첫번째 요소를 first_audio로 지정
first_audio_id = playlist_audios[0]['audio_id']
first_audio=get_object_or_404(Audio,audio_id=first_audio_id)
# Request에 담긴 데이터로 NewPlaylistSerializer생성
serializer = NewPlaylistSerializer(data=Request)
# 해시태그: 베이스 플레이리스트에서 hashtag뽑아와서 list로 저장
base_pli=get_object_or_404(Playlist, playlist_id=request.data['playlist_id'])
base_hashtag=list(base_pli.hashtag.all())
if serializer.is_valid():
# 작성자정보(mypli_user)와 첫번째오디오정보(first_audio)를 담아 시리얼라이저 save
newpli=serializer.save(mypli_user = request.user,first_audio=first_audio)
# playlist_audios 필드에 오디오들 추가
for audios in playlist_audios:
audio=audios['audio_id']
audioA, _ = Audio.objects.get_or_create(audio_id=audio)
newpli.playlist_audio.add(audioA)
# hashtag 필드에 해시태그 추가
for ht in base_hashtag:
newpli.hashtag.add(ht)
return Response({'message': '나만의 플리 성공', 'data': serializer.data}, status=status.HTTP_200_OK)
return Response(serializer.errors)
serializers.py
class NewPlaylistSerializer(serializers.ModelSerializer):
class Meta:
model=Playlist
fields=['playlist_id','title','des','is_base','first_audio']
request
{
"title": "[제목]",
"des": "[추가 설명]",
"playlist_id": 14,
"playlist_audio": [
{ "audio_id": 1 },
{ "audio_id": 2 },
{ "audio_id": 4 }
]
}
response
{
"message": "나만의 플리 성공",
"data": {
"playlist_id": 22,
"title": "[제목]",
"des": "[추가 설명]",
"is_base": false,
"first_audio": 1
}
}
