seminar-2020 icon indicating copy to clipboard operation
seminar-2020 copied to clipboard

booleanfield에서 must be valid boolean error

Open yuri-0415 opened this issue 4 years ago • 6 comments

image

POST /api/v1/seminar/를 테스트하는 중인데 Fail에 발생해서 확인해보니 online이 valid boolean이어야 한다는 에러가 출력되더라구요!

image

그런데 위의 코드에서 print(type(seminar.online))으로 찍어 보았을 때 type이 boolean으로 찍히는 것을 확인할 수 있었습니다. 코드 상 online에 True or False 중 하나는 반드시 들어가게 되구요...! print가 작동하는 것으로 보아 serializer.is_valid에서 이러한 에러가 발생하는 것 같은데 혹시 이러한 오류가 발생하는 이유가 무엇일까요? 구글링 해도 답을 찾지 못해 질문 드립니다:disappointed_relieved:

models.py내에서는 online = models.BooleanField(default=True) 이렇게 설정이 되어 있습니다. serializers.py에서는 별도의 online을 구성하지 않고 class Meta 안에서 처리됩니다.

yuri-0415 avatar Oct 14 '20 02:10 yuri-0415

serializer에서 online에 default=True걸어보시겠어요?

eldpswp99 avatar Oct 14 '20 02:10 eldpswp99

@eldpswp99 수정해서 이렇게 걸었는데 결과는 같게 나옵니다:sob:

image

online 부분은 이렇게 작성되어 있습니다 image

yuri-0415 avatar Oct 14 '20 02:10 yuri-0415

online부분이라는 것이 validate_online인가요?

eldpswp99 avatar Oct 14 '20 04:10 eldpswp99

@eldpswp99 아뇨 views.py에서 SeminarViewSet 내부의 create 함수 내에서 request로 받은 online을 말하는 거였습니다! create 내에서 online을 체크해주었는데 validate_online을 통해 확인해 주어야 할까요?

yuri-0415 avatar Oct 14 '20 06:10 yuri-0415

@yuri-0415 아뇨 로직이 뷰에서 처리하도록 하신거면 굳이 바꾸실 필요는 없어 보입니다. serializer에서 is_valid를 호출하신 이유를 알 수 있을까요? save를 호출하지 않으셨는데, save를 호출하기 위해서가 아니라면 is_valid를 굳이 호출하실 필요가 없고, data를 줄 필요도 없어 보입니다. post인거로 보아서 update도 아닌 것 같은데, partial=True도 필요없어 보이구요. 관련 이슈로는 #179 ,#180 이 있습니다.

그리고 제가 앞서 말씀드렸던 serializer에 default=True는 안하셔도 될 것 같습니다. 제가 serializer로 create로직을 짜셨다고 착각을 했네요 ㅠ

  • 혹시 테스트 로직에 trUE와 같은 상황을 테스트 하는 것이 있나요? serailizer에서 booleanfield는

TRUE_VALUES = { 't', 'T', 'y', 'Y', 'yes', 'YES', 'true', 'True', 'TRUE', 'on', 'On', 'ON', '1', 1, True } FALSE_VALUES = { 'f', 'F', 'n', 'N', 'no', 'NO', 'false', 'False', 'FALSE', 'off', 'Off', 'OFF', '0', 0, 0.0, False }

에 따라 validation을 실행하게 됩니다.

#183 에 다빈님이 serializers.BooleanField가 TRUE_VALUES, FALSE_VALUES로 취급하는 것들 정도만 고려하시면 됩니다!

라고 언급하셨던 것으로 보아 저기에 맞게 테스트 작성하시면 될 것 같습니다.

eldpswp99 avatar Oct 14 '20 06:10 eldpswp99

@eldpswp99 아하 그렇군요...! 이전 이슈를 더 꼼꼼히 확인해야겠네요:smiley: 감사드립니다!!!

yuri-0415 avatar Oct 14 '20 08:10 yuri-0415