프로젝트기간 장바구니 추가를 구현 하는 상황에서 create
메서드를 사용하여 추가하였는데 멘토분께서 get_or_create
를 공부하여 사용해보라는 리뷰를 달아주셨다.
get_or_create는 object,created
로 이루어져있고 object
는 꺼내려 하는 인자이고 created
는 True, False
로 이루어져있어서 db에없어 생성이되었다면 True로 기존에 데이터가 있다면 추가되지않고 Falsed이다. 하지만 장바구니에 기존데이터가 있으면 그대로 추가되는 조건을 걸었다.
위 cart라는 object에 db를 추가하기 위해서 product, user, quauntity를 키워드를 입력하였다. 그리고 postman
으로 테스트를 하였을 때 새롭게 추가하고자하는 값을 db에 create했을 때 db에 추가가 되었고 한번 더 추가를 했을때도 무리 없이 추가가되었다. 하지만 3번째 추가를 할 때, ADD_SUCCESS
가 아닌 SUCCESS
라는 메세지가 나와서 뭔가 잘못됬다는것을 느꼈다. 그리고 db를 확인하니 아래와 같이 추가되는것이아닌 새로운 db가 생성되어있었다.
*추가시키고자 한 값 : product = 17, user = 1, quantity = 1
무엇이 잘못된건지 고민하다가 quantity
를 키워드로 걸면 안된다는 생각이 들었다.
추가하고자 하는 값이 없을때 새로운 db를 추가 하였고 추가된 quantity의 값이 있을때 기존값에 더하여 추가가 되었다. 하지만 quantity가 2가 되었고 1을 추가하려했지만 기존 db에 위 이미지를 보면 quantity = 1, product_id = 17, user_id = 1
이라는 db가 없었기에 새롭게 추가가 된 것 이었다.
코드를 다시 수정하였고 더 공부한 결과 defalts
값을 설정 할 수 있다는 것을 알게되었다. 값을 설정할 수 있다는 것을 몰랐더라면 모델링을 수정해야했기에 번거로움이 있을 뻔 하여서 다행이었다. defalts값을 설정할때 quantity가 기존 db의 quantity 값을 를 참조하게하여 stock
이 있는 한 추가되게 코드를 수정하였다.
하지만 코드를 수정하여 값을 추가하였을때 여러 에러메세지가 나왔고 그중 return 2
라는 리턴하는 값이 두개라는 듯한 에러 메세지가 나와서 위 이미지의 2개의 중복되는값의 db가 있기에 에러가 발생한 듯한 느낌이와서 하나의 db를 delete한 결과 quantity가 추가되는 것에 대한 에러는 발생하지않고 잘 진행된다는 것을 알 수 있게 되었다. 이번을 계기로 여러가지 메서드를 사용하기 위해서는 정확한 조건이 무엇인지 어떻게 사용되는지 파악하고 이용해야한다는 걸 다시 한 번 깨닳게 되었다.