본문 바로가기
ERROR

암호화 알고리즘 사용 시, max_length 설정 에러

by 코드뭉치 2023. 7. 2.

주문 과정에서 배송정보 입력, 기존 배송정보 사용시 발생한 문제

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 설정을 바꿔주어서 해결.

댓글