[ERROR] DRF AttributeError
[Error] DRF AttributeError
에러 발생
모델 시리얼라이저로 queryset을 직렬화하여 응답하고 싶었다.
그런데 해당 api를 호출하면 해당 queryset에 특정 필드의 속성이 없다는 에러가 계속해서 반복되었다.
이 에러메시지 때문에 간단하게 해결할 것을 좀 더 많은 시간을 투자하여 해결했다.
에러 원인
DRF의 시리얼라이저는 한 개의 객체만 이해할 수 있고 iterable한 객체는 이해할 수 없다.
예를 들어 장고 ORM에서 get이 아닌 filter나 all로 쿼리를 날릴 경우 ORM은 iterable한 객체를 반환한다.
이때문에 발생하는 에러다.
에러 해결
시리얼라이저의 default는 하나의 객체만을 이해하도록 설계되어 있으나 반복가능한 객체를 절대로 이해할 수 없단 것은 아니다.
간단하게 시리얼라이저 인스턴스를 생성할 때 many=True 속성을 추가해주면 된다.
serializer = PostSerializer(post, many=True)
느낀 점
일단 에러메시지를 왜 저렇게 만들어놨을까에 대한 의문은 풀리지 않는다.
그리고 DRF가 아닌 django의 serializer는 오히려 단일 객체에 대해서 iterable 하지 않는다는 에러를 발생시킨다는 점에서 의아했다.
뭐 일단 차이점을 알고 잘 사용하는 수 밖에..
댓글남기기