inflearn logo
강의

Course

Instructor

Django REST Framework Essentials

DRF ImageField

to_representation() 오버라이딩 질문입니다.

496

devKya

2 asked

0

안녕하세요. 강의 잘 듣고 있습니다.

강의 내용 중 PostListAPIView의 get_serializer_context() 오버라이딩 말고

FileField()의 to_representaion() 메소드를 오버라이딩 하려고 시도중입니다. PostListSerializer에서 오버라이딩 하는 것으로 보이는데 방법을 잘 모르겠습니다.

아래와 같이 오버라이딩 하면, ModelSerializer의 to_representation()을 오버라이딩하게 되버립니다.

class PostListSerializer(serializers.ModelSerializer):
    category = serializers.ReadOnlyField(source='category.name')
    
    class Meta:
        model = Post
        fields = ['id', 'title', 'image', 'like', 'category'] 
        
    def to_representation(self, value):
        if not value:
            return None

        use_url = getattr(self, 'use_url', api_settings.UPLOADED_FILES_USE_URL)
        if use_url:
            try:
                url = value.url
            except AttributeError:
                return None
            request = self.context.get('request', None)
            if request is not None:
                return url
            return url

        return value.name

rest-api django

Answer 3

0

bestdjango

제 PC 에서는 잘되고 있습니다.

이전 코드는 삭제했는지요 ?

views.py 에서 PostListAPIView 의 get_serializer_context() 메소드는 삭제 요망.

그래도 안되면, PostListAPIView 와 PostListSerializer 코드와 에러 메세지를 올려 줄래요.

0

devKya

안녕하세요. 강사님.

답변 감사합니다.

 

강사님께서 제공해주신 코드로 진행해보니, id, title, image ... 도 to_representation() 메소드에 영향을 받아 제대로 출력되지 않고,

The 'image' attribute has no file associated with it. 라는 에러를 출력합니다.

0

bestdjango

안녕하세요. 독자님.

독자님의 얘기처럼, PostListSerializer 의 to_representation() 을 오버라이딩하는게 맞습니다.

아래 코드처럼, 오버라이딩할 내부 로직이 복잡할 때는, super() 로 가져와서, 원하는 필드만 바꿔주면 됩니다. 그리고 instance.image.url 이 장고에서 디폴트로 만들어주는 url 입니다.

class PostListSerializer(serializers.ModelSerializer):
    category = serializers.CharField(source='category.name')

    class Meta:
        model = Post
        fields = ['id', 'title', 'image', 'like', 'category']

    def to_representation(self, instance):
        ret = super().to_representation(instance)
        ret['image'] = instance.image.url
        return ret

블로그 첫 화면이 안 나옵니다.

0

317

3

INSTALLED_APPS 순서

0

246

1

vscode 실행안됨

0

667

3

django venv activate 하고 나서 vue 서버도 실행 해야 하나요?

0

367

2

더 공부할게있을까요

0

369

1

용어에 대해 문의 드립니다.

0

283

2

like 기능을 위한 overriding 문의

0

322

1

코드 최적화 과정

0

364

1

유저 1명이 1개의 게시글에 좋아요를 누를 경우

0

356

1

프로잭트를 생성하고 runserver하면 ModuleNotFoundError: No module named 발생해요

0

894

4

GET Method 에서 왜 Like 수를 증가시키는지 궁금합니다.

0

376

1

CSRF Token에 대한 질문입니다.

0

609

1

ModuleNotFoundError: No module named 'rest_framework django' 오류

0

3037

1

앱을 구성할 때 api 앱과 blog 앱을 나누어서 구성하는 이유가 궁금합니다ㅜ

1

472

2

공부 순서에 관해 질문드립니다.

0

360

1

CateTagAPIView에서 get 메소드

1

309

2

깃헙 페이지를 보고싶어요

0

230

1

디버거 관련 질문입니다.

0

277

3

가장 마지막강의 (Generic View -> ViewSet migration) 질문입니다.

0

223

1

PostCommentListAPIView(게시물 댓글 조회 api) 관련 질문

0

211

1

댓글 보기 및 삭제 api

0

280

1

post, comment crud 질문

0

228

4

CateTagSerializer 질문입니다!

3

337

3

The serializer field might be named incorrectly and not match any attribute or key on the `User` instance.

0

840

1