역시 mongoDB는 아주 간단하게 데이터를 입출력 하는 용도로만 사용해야하나보다. 따흐흑ㅠㅜ
mongoDB와 열심히 싸우고 있다. objectId 때문에 이것저것 검색했지만, 아직 나의 실력으로는 이해하지 못하엿기에, 우회해서 하고 있다.
지금 django는 DRF 지. 하면서 serializer를 이용하면서 진행하고 있는데, 이건 나의 잘못된 선택이었나 싶기도 하다ㅠㅜ mongoDB는 이미 데이터 저장이 JSON형태로 저장이 되어버리니 굳이 serializer를 거칠 필요도 없는데 말이다.
어쨌든 이번에는 그간 있었던 문제 때문에 진행을 했다.
django와 mongoDB의 데이터를 연동해서 사용하는데 이 때, mongoDB의 _id도 생기고, django의 id도 생겼다.
둘 다 제대로 생겨서 관리라도 제대로 되면 다행인데, 진행하던 중 문제가 생겨서 어떤 테이블은 _id와 id 둘 다 생기고, 또 다른 어떤 테이블은 _id만 생기는 문제가 생겼다.
고치려고 했지만, 애초에 문제가 잘 못 되었구나를 db drop도 하고 나서 느꼈다.
결국 새로 만들고 _id만 이용하기로 했다.
model을 생성할 때 djongo를 이용해주고
from djongo import models
해당 model의 필드에는 _id를 명시해서 나 이 id말고 _id 쓸거임 ㅇㅇ 해주면 된다.
_id = models.ObjectIdField()
그러니 이 부분에 대해서는 해결이 되었다.
foreing key를 아주 열심히 써대고 있는데 mongoDB를 적용하다보니 이상하게 사용되고 있다.
그런데 얘네를 혼자만 불러올 때는 문제가 없는데, 다른 애를 엮어서 불러오니 objectId 어쩌고 하는 문제가 계속 발생했다.
이 문제 때문에 열심히 뒤졌으나, 아직 나의 손으로 제대로 해결할 수 있는 경지(?)는 아닌 듯 하다. 어차피 난 이미 serializer를 쓰고 있으니, 여기서 우회해가며 사용을 하기로 했다.
주 모델에는 unique인 값이 있으니 이를 활용해서 진행하기로 했다. 이렇게 하니, db 자체를 완벽히 활용은 아니지만, 내가 필요한 행위들은 모두 할 수 있었다.
참고로 objectId는 str()로 바꿔면 serializer로 데이터를 출력하는데 문제가 없고, 또 mongoDB로 데이터를 보내거나 찾을 때도
from bson import ObjectId
을 이용해서 ObjectId화 시켜주면 된다.
다만 foreignKey일 때가 문제라 이 방법은 완전히 해결한 방법이 아니라 지금도 방법은 찾고 있다.ㅠㅜ
python은 다른 것들과 다르게 true가 아닌 True를 이용하는데, mongoDB에서 데이터를 가져올 때, True를 인식하지 못하는 문제가 있나보다.
cards = get_list_or_404(TarotCard, is_major=True)
그래서 필터링을 하려니 다음처럼 에러가 발생했다.

No exception message supplied
어떻게 바로 알았냐 하면 필터링 할 때는 문제가 없었걸랑
그래서 검색결과 booleanField로 필터링을 하려는 경우 아래처럼 하면 된다.
cards = get_list_or_404(TarotCard, is_major__in=[True])
찾으려는 컬럼명에 __in을 붙이고 True나 False에는 []를 이용해서 감싸주고 하니 잘 작동하는 모습을 보여주었다.
이제 필요한 데이터들은 다 기입했으니, 빨리 데이터 기입 끝내고, 다시 프론트로 넘어가서 데이터 연결은 진행해야겠다 따흐흑ㅠㅠㅠ 하나 겨우 해결해도 산넘어 산이다. 흑흑흑