주문 과정에서 배송정보 입력, 기존 배송정보 사용시 발생한 문제
def create(self, request, *args, **kwargs):
if delivery_id := self.request.data.get("delivery_id"):
deli = get_object_or_404(Delivery, pk=delivery_id)
data = {
"user": request.user,
"address": deli.address,
"detail_address": deli.detail_address,
"recipient": deli.recipient,
"postal_code": deli.postal_code,
}
elif request.data.get("postal_code") and request.data.get("recipient"):
data = request.data
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(
serializer.data, status=status.HTTP_201_CREATED, headers=headers
)
원래 이렇게 코드를 짰는데, 시리얼라이저의 밸리데이션이 추가된 이후 밸리데이션을 통과하지 못함.
exception이 400으로만 나와서 직접 is_valid 메소드에서 에러 메시지를 프린트해본 결과,
{'postal_code': [ErrorDetail(string='이 필드의 글자 수가 10 이하인지 확인하십시오.', code='max_length')]}
원인은 원래 postal_code에 대한 밸리데이션이 값이 있는지, 공백은 없는지만을 검사했는데,
추가로 isdigit()을 검사하게 되면서, 암호화해서 저장하던 배송정보를 불러와서 다시 밸리데이션을 거칠 때,
해당 밸리데이션을 통과하지 못함.
시리얼라이저의 is_valid에서 처음 모델을 만들 때 설정해놓은 max length가
암호화 시 입력값보다 크게 들어가서 밸리데이션을 통과하지 못했던 것.
필드의 max length 설정을 바꿔주어서 해결.
'ERROR' 카테고리의 다른 글
암호화 데이터 이중 암호화 문제 (0) | 2023.07.02 |
---|---|
GenericView perform_create에서 에러 발생시키기 (0) | 2023.06.26 |
퍼미션 논리연산시, Error raise (0) | 2023.06.26 |
테스트 코드 작성 중 .save() 누락 (0) | 2023.06.26 |
WIL 20230619 ~ 20230625 - 최종 프로젝트 주차 3 (0) | 2023.06.26 |
댓글