백엔드
Django에 대하여(38)_DRF 역참조 데이터 구성
데이터분석가 이채은
2024. 5. 26. 09:00
1. Article → Comment 간 역참조 관계를 활용한 JSON 데이터 재구성
아래 2가지 사항에 대한 데이터 재구성하기
- 단일 게시글 조회 시 해당 게시글에 작성된 댓글 목록 데이터도 함께 붙여서 응답
- 단일 게시글 조회 시 해당 게시글에 작성된 댓글 개수 데이터도 함께 붙여서 응답
2. 단일 게시글 + 댓글 목록
Nested relationships
- 모델 관계상으로 참조하는 대상은 참조되는 대상의 표현에 포함되거나 중첩될 수 있다.
- 이러한 중첩된 관계는 serializers를 필드로 사용하여 표현 가능
# articles/serializers.py
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = '__all__'
read_only_fields = ('article',)
class ArticleSerializer(serializers.ModelSerializer):
comment_set = CommentSerializer(many=True, read_only=True)
class Meta:
model = Article
fields = '__all__'
read_only_fields = ('article',)
class ArticleSerializer(serializers.ModelSerializer):
comment_set = CommentSerializer(many=True, read_only=True)
class Meta:
model = Article
fields = '__all__'
3. 단일 게시글 + 댓글 개수
댓글 개수에 해당하는 새로운 필드 생성
'source'
- 필드를 채우는 데 사용할 속성의 이름
- 점 표기법(dotted notation)을 사용하여 속성을 탐색할 수 있다.
# articles/serializers.py
class ArticleSerializer(serializers.ModelSerializer):
comment_set = CommentSerializer(many=True, read_only=True)
comment_count = serializers.IntegerField(source='comment_set.count', read_only=True)
class Meta:
model = Article
fields = '__all__'
4. [주의] 읽기 전용 필드 지정 이슈
- 특정 필드를 override 혹은 추가한 경우 read_only_fields는 동작하지 않습니다.
- 해당 필드의 read_only 키워드 인자로 작성해야 합니다.