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', ]
'Programming > TIL' 카테고리의 다른 글
DRF | Community | 인기글 | 카테고리 (0) | 2022.11.12 |
---|---|
11.10 | DRF | CBV | sign in | signup | timeattack (0) | 2022.11.10 |
JS | django pagination | 장고 페이지네이션 | (0) | 2022.11.08 |
WIL | backend pagination | js기본 | front 회원정보 수정 (0) | 2022.11.06 |
jQuery | js | img 전송 | 정보수정data 전송확인! | backend front 연동 (0) | 2022.11.05 |