inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

Django Unique Key Conflict

해결된 질문

408

BJ원생

작성한 질문수 3

1

아래와 같이 정의한 상황에서, SomeModel Object를 생성 시 code는 자동으로 Generate 됩니다. 그런데 자동으로 생성된 code가 만약 DB Record 중 하나와 중복된다면 이후에는 어떤 Action이 진행되나요?

바라기로는 code가 다시 generate되고 그 code가 중복되지 않는다면 DB에 Record가 생성되면 좋겠지만 그렇게 진행될까요?

from django.utils.crypto import get_random_string


def generate_code(length=8):
    return get_random_string(length)


class SomeModel(models.Model):
...
    code = models.CharField(max_length=8, unique=True, null=False, default=generate_code)
...

uniquekey python code docker conflict django react

답변 1

1

이진석

안녕하세요.

모델 필드의 default 인자로 지정되는 함수는 함수 호출 시점에 값을 결정할 수 있다는 특징이 있을 뿐, 순수 함수로서 값 만을 반환해야만 하는 함수입니다. 그러니 중복여부를 체크하는 로직을 넣으셔서는 안 됩니다.

unique=True가 지정된 필드의 default로 지정된 함수에서 중복이 발생되는 값을 반환하면 DB단에서 unique 제약사항 위배에 따른 오류가 발생합니다.

그렇기에 유일성을 지키시면서 default 인자를 사용코자 하신다면, uuid4처럼 값 그 자체로 유일성을 지키는 값을 지정하시는 것이 좋습니다.

그렇지 않다면, default 인자는 사용하지 마시고, 별도로 이를 구현해주셔야 합니다.

화이팅입니다. :-)

 

0

BJ원생

답변 감사합니다!

추가 질문이 있는데요, Serializer.save 에서 유일성을 확인하는 Logic을 추가하면 되겠는데, 그럼 Model의 save 단에서는 힘들까요?

0

이진석

시리얼라이저에서는 validate_필드명 메서드와 validate 메서드를 통해 유효성 검사를 수행합니다.

시리얼라이저의 save 메소드와 모델의 save 메소드에서는 저장의 책임만 있을 뿐, 그 안에서 유효성 검사를 하시는 것은 본래의 목적에서 벗어나는 부적절한 접근입니다.

0

BJ원생

덕분에 잘 이해했습니다. 너무 감사합니다!

안녕하세요.

0

51

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

275

1

useEffect 훅에서 else 유무에 따른 결과

0

212

1

useAxios 훅의 dependency array 설정

0

247

1

useEffect에서 변수 업데이트 관련 질문

0

383

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

268

1

bootstrap4

0

471

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

366

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

576

3

useState는 필수일까요?

0

263

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

600

4

Django allauth를 사용한 소셜 로그인 시 에러

0

655

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

557

2

useLocalStorage() 함수 사용여부

0

230

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

449

1

리듀서의 의미 재확인

0

430

1

simple-jwt Refresh Token 사용 노하우

0

899

2

docker compose 를 통한 배포 관련 오류 문의

0

674

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

366

1

is_like_user

0

233

1

related_name 오류

0

275

1

re_path 오류

0

259

1

re_path url

0

251

1

No post matches the given query

0

661

2