[DRF]다대다: string 필드값 가져오기

박민하·2022년 9월 29일
0

DRF

목록 보기
8/9

✅ 기본 정보

  • 메인페이지에 작성된 게시물을 내보낸다.
  • 게시물 작성 시 태그를 필수적으로 달아야 한다.
  • 이 태그가 id값으로 반환되는데, 태그 name을 반환하고 싶다.

✔ 코드

# serializers.py
class PostListSerializer(serializers.ModelSerializer):
    like = serializers.IntegerField(default=0, read_only=True)
    view = serializers.IntegerField(default=0, read_only=True)

    class Meta:
        model = Post
        fields = '__all__'

✔ /posts/

✅ 수정 코드

✔ 방법1. tag = serializers.CharField(source='tag.name') 추가

# serializers.py
class PostListSerializer(serializers.ModelSerializer):
    like = serializers.IntegerField(default=0, read_only=True)
    view = serializers.IntegerField(default=0, read_only=True)
    tag  = serializers.CharField(source='tag.name')

    class Meta:
        model = Post
        fields = '__all__'

  결과값이 null로 나온다. 왜 이런가 싶어서 shell로 tag.name을 돌려보니 null 값이 나왔다. 어떻게 해야 name이 제대로 나올까 해보니,

  그래서 얘를 어떻게 활용하나?

✔ 방법2. tag = serializers.StringRelatedField(many=True) 추가

# serializers.py
class PostListSerializer(serializers.ModelSerializer):
    like = serializers.IntegerField(default=0, read_only=True)
    view = serializers.IntegerField(default=0, read_only=True)
    tag  = serializers.StringRelatedField(many=True)

    class Meta:
        model = Post
        fields = '__all__'

  애초에 잘못된 필드를 사용중이었다. 아무튼 해결.


[공식 문서 참고]
https://www.django-rest-framework.org/api-guide/relations/#stringrelatedfield

profile
backend developer 🐌

0개의 댓글