최대 1 분 소요

[Error] serializers ‘objects is not iterable’


에러 발생


DRF 를 사용하지 않고 스크립트에서 장고 서버 api를 get으로 호출하면 모델 객체를 응답하도록 api를 만들었다.


이전에도 사용했었던 로직에서 모델 객체만 바뀌었기 때문에 당연히 될 줄 알았으나 요청을 보내면 500 상태 코드가 나오며 아무런 값도 반환하지 않았다.


에러 원인


장고 serializers 는 반복 가능한 객체 즉 iterable objects 를 default로 동작하기 때문이었다.


object_test = serializers.serialize('json',Test.objects.get(pk=1))


장고 ORM에서 get을 사용했을 땐 단 하나의 객체만 반환하기 때문에 ‘not iterable’ 하다.


에러 해결


  1. filter 사용
object_test = serializers.serialize('json',Test.objects.filter(pk=1))


  1. 리스트로 전달


object_test = serializers.serialize('json',[Test.objects.get(pk=1),])


ORM에서 get 과 filter의 차이를 이해하고, python 에서 itreable 객체에 대한 이해가 있으면 어렵지 않게 해결 가능한 에러다.

댓글남기기