๐Ÿฅ”Project/[Project] Threepark

[Capstone Design] 3. ๋ฐฑ์—”๋“œ ๊ตฌํ˜„ - (5) DRF ๊ฐœ๋ฐœ | SERIALIZER

mingyung 2024. 5. 21. 14:39

๋ชจ๋ธ ์ž‘์„ฑ์„ ์™„๋ฃŒ ํ›„ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ํ•œ๋‹ค.

 

์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์˜ ๊ฒฝ์šฐ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š”๊ฒฝ์šฐ ๋Œ€์ฒด๋กœ 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๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.