모델 작성을 완료 후 시리얼라이저를 작성하도록 한다.
시리얼라이저의 경우 민감한 데이터가 없는경우 대체로 all로 작성하였으며, 특수한 경우인 community와 diary만 살펴본다.
Diary
일기의 경우 크게 일기 내용과, 일기내용을 바탕으로 생성된 음악, 이미지, 감정 데이터로 크게 나눠볼 수 있다.
이중 음악의 경우는 diary모델에서 fk로 참조하기 때문에, 음악 데이터를 생성하고, 일기와 연결하는 부분은 따로 구성했다.
따라서 시리얼라이저는 다음과 같다.
1. 순수하게 일기를 작성할 수 있게 하고, 다른 연관 데이터는 only read로 읽을수만 있도록 하는 DiarySerializer
2. 일기 내용을 토대로 음악을 추천하고, 음악-일기를 연결할 수 있도록 하는 DiaryMusicSerializer
DiarySerializer
class DiarySerializer(serializers.ModelSerializer):
music = MusicSerializer(required=False)
image_set = ImageSerializer(many=True, read_only=True)
emotion_set = EmotionSerializer(many=True, read_only=True)
class Meta:
model = Diary
fields = ['id','user','title','content','registered_at','last_update_at','music','is_open','image_set','emotion_set']
DiaryMusicSerializer
class DiaryMusicSerializer(serializers.ModelSerializer):
music = MusicSerializer(required=False)
class Meta:
model = Diary
fields =['id', 'user', 'content', 'music']
def update(self, instance, validated_data):
music_data = validated_data.pop('music', None)
instance = super().update(instance, validated_data)
if music_data:
music, _ = Music.objects.get_or_create(**music_data)
instance.music = music
return instance
Community
커뮤니티의 경우 서로 팔로우가 허용된 관계의 유저 일기 중 공개된 것들을 조회할 수 있도록 한다.
CommunitySerializer
class CommunitySerializer(serializers.ModelSerializer):
user = UserSerializer(required = False)
music = MusicSerializer(required=False)
image_set = ImageSerializer(many=True, read_only=True)
class Meta:
model = Diary
fields = ['id','user','title','content','music','image_set','registered_at','last_update_at', 'is_open']
여기에 팔로우 정보가 없는데요? > 이부분은 후에 permissions를 통해 가능하게 한다.
'[Project] Threepark' 카테고리의 다른 글
[Capstone Design] 3. 백엔드 구현 - (7) DRF 개발 | VIEW (0) | 2024.05.21 |
---|---|
[Capstone Design] 3. 백엔드 구현 - (6) DRF 개발 | PERMISSION (0) | 2024.05.21 |
[Capstone Design] 3. 백엔드 구현 - (4) DRF 개발 | DB & MODEL (0) | 2024.05.21 |
[Capstone Design] 3. 백엔드 구현 - (3) Django에 RDS 연결하기 (0) | 2024.05.14 |
[Capstone Design] 3. 백엔드 구현 - (2) Django Environ으로 환경변수 관리하기 (0) | 2024.05.14 |