우리 프로젝트의 Review를 예로 들면, Review에는 User에 대한 객체와 Organization에 대한 객체가 Embedded되어야 합니다.
Django에서 객체를 삽입하는 방법은 아래와 같습니다.
from django.forms.models import model_to_dict
def post(self, request):
# jwt middleware로 얻은 user id
user_id = request.user.id
user_data = User.objects.get(id=user_id)
user_data = model_to_dict(user_data)
user_data["id"] = user_id
del user_data["password"]
org_id = request.data["org_id"]
organization_data = Organization.objects.get(_id=ObjectId(org_id))
organization_data = model_to_dict(organization_data)
data = request.data
data["user"] = user_data
data["organization"] = organization_data
serializer = UserReviewSerializer(data=data)
if serializer.is_valid():
new_review = serializer.save()
(예시 코드에는 객체를 삽입하는 코드만 작성했습니다.)
User나 Organization Model에서 id로 해당 유저 또는 기관의 데이터를 가져옵니다.
해당 데이터는 Model 이라는 Type을 가지고 있습니다.
하지만 Serializer에서는 Model 타입을 읽지 못하기때문에, 우리는 Model을 Dictionary로 타입을 바꿔줘야 합니다.
이 때 사용하는 게 from django.forms.models import model_to_dict 입니다. 장고 자체에서 지원하는 라이브러리를 사용하면 됩니다.
그 후 serializer에 넣을 data라는 객체에 dictionary화한 User와 Organization 데이터를 넣어주면 됩니다.
MongoDB는 관계를 지정하는 Foreign Key를 지원하지 않습니다.
그렇기 때문에 보통 참조하는 데이터를 Embedded 시켜서 관리합니다.
우리 프로젝트의 Review를 예로 들면, Review에는 User에 대한 객체와 Organization에 대한 객체가 Embedded되어야 합니다.
Django에서 객체를 삽입하는 방법은 아래와 같습니다.
(예시 코드에는 객체를 삽입하는 코드만 작성했습니다.) User나 Organization Model에서 id로 해당 유저 또는 기관의 데이터를 가져옵니다.
해당 데이터는 Model 이라는 Type을 가지고 있습니다. 하지만 Serializer에서는 Model 타입을 읽지 못하기때문에, 우리는 Model을 Dictionary로 타입을 바꿔줘야 합니다. 이 때 사용하는 게
from django.forms.models import model_to_dict
입니다. 장고 자체에서 지원하는 라이브러리를 사용하면 됩니다. 그 후 serializer에 넣을 data라는 객체에 dictionary화한 User와 Organization 데이터를 넣어주면 됩니다.