본문으로 바로가기

index serializer | 공부

category TIL 2022. 11. 9. 00:39
class StudyListSerializer(serializers.ModelSerializer):
    user=serializers.SerializerMethodField()
    like_count=serializers.SerializerMethodField()
    student_count=serializers.SerializerMethodField()

    def get_user(self, obj):
        return obj.user.username
    def get_like_count(self, obj):
        return obj.like.count()
    def get_student_count(self, obj): # 여기서 obj로 스터디 객체 가져온거다 obj.id사용해도 된다 
        return obj.student_set.filter(id=obj.id, is_accept=True).count()     # 스터디를 바라보는 걸 다 가져왔다 여기서 필터를 건다 가능
    class Meta:
        model=Study
        fields=("student_count", "title","content","thumbnail_img","headcount","on_off_line","user","like_count","create_dt")

study_list 를 보여줄때 필요한 정보를 생각해서 Serializer를 만들었다.

필요정보 시리얼라이저를 만들어 봤다. 내가 필요한 정보를 모델에서 시리얼라이저를통해 필요한 정보만 보낼 수 있었다.

오늘의 프로젝트 발표에서는 get_함수를 더 추가해서 사용했다. 아래에서 확인할 수 있다.

프로젝트를 진행하면서 알게된 점은 하나하나 직접 겪으면서 추가하는 코드도 좋지만 기획자체를 철저하게 잘짜서 어떤게 필요한지 바로 알거나 기획에서 부족한게 뭔지 느껴보는게 더 중요한 걸 알게되었다.

이제 기획을하고 어떤식으로 정보들이 흘러가는지 알아보고 필요했던 정보들로 구현을 어떻게 할 것인지 확실히 정하고 프로젝트를 진행해야겠다고 생각한다.

프로젝트 전 기획을 철저하게 준비하고 실행하자! 그리고 작은거 하나하나 만들때도 계획을 짜자

class StudyDetailSerializer(serializers.ModelSerializer):
    user = serializers.SerializerMethodField()
    is_like = serializers.SerializerMethodField()
    is_author = serializers.SerializerMethodField()
    is_student = serializers.SerializerMethodField()
    sended = serializers.SerializerMethodField()
    thumbnail_img = serializers.SerializerMethodField()
    now_cnt = serializers.SerializerMethodField()
    # tags = TagSerializer(read_only = True, many = True)
    tags = serializers.SerializerMethodField()

    def get_user(self, obj):
        return obj.user.username

    def get_is_like(self, obj):
        flag = obj.like.filter(id=self.context.get('request').user.id).exists()
        return flag

    def get_is_author(self, obj):
        flag = False
        if obj.user == self.context.get('request').user:
            flag = True
        return flag

    def get_is_student(self, obj):
        flag = obj.student_set.filter(user=self.context.get(
            'request').user, post=obj, is_accept=True).exists()
        return flag

    def get_sended(self, obj):
        flag = obj.student_set.filter(user=self.context.get(
            'request').user, post=obj, is_accept=None).exists()
        return flag

    def get_thumbnail_img(self, obj):
        return obj.thumbnail_img.url

    def get_now_cnt(self, obj):
        return obj.student_set.filter(is_accept=True).count() + 1

    def get_tags(self, obj):
        return [tag.tag_name for tag in obj.tags.all()]

    class Meta:
        model = Study
        fields = ['id', 'user', 'headcount', 'title', 'content', 'is_online', 'is_like',
                  'thumbnail_img', 'is_author', 'is_student', 'sended', 'now_cnt', 'tags']
        read_only_fields = ['tags', ]