최대 1 분 소요

[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 하지 않는다는 에러를 발생시킨다는 점에서 의아했다.


뭐 일단 차이점을 알고 잘 사용하는 수 밖에..

댓글남기기