PETCH-KR / Backend-Django

0 stars 0 forks source link

MongoDB Embedded 방식으로 DB 관리하는 방법 (POST) #25

Open Zih0 opened 3 years ago

Zih0 commented 3 years ago

MongoDB는 관계를 지정하는 Foreign Key를 지원하지 않습니다.

그렇기 때문에 보통 참조하는 데이터를 Embedded 시켜서 관리합니다.

우리 프로젝트의 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 데이터를 넣어주면 됩니다.