스터디/Web

[Django] 한 프로젝트 내에서 다른 앱의 모델 사용하기

sollllllll 2022. 2. 9. 00:03

프로젝트를 여러 명이 함께 진행하다보니 각 팀원이 서로 다른 앱을 구현하게 되는데,

이 때 다른 앱의 모델 필드를 외래키로 사용하거나 모델 자체를 내 앱에서 사용하는 경우

어떻게 사용하면 되는지에 대한 내용을 다뤄보려고 한다.

편의상 내 앱의 이름은 'myapp', 다른 팀원의 앱 이름은 'yourapp'으로 서술하도록 하겠다.

 

 

모델들의 내용은 다음과 같다.

# myapp/models.py

class Review(models.Model):
    ...
    userId = models.ForeignKey(User, on_delete=models.CASCADE)
    ...
    
# yourapp/models.py

class User(models.Model):
    ...

Review 모델에서는 User 모델을 외래키로 사용하지만 내가 만든 앱에는 해당 모델이 존재하지 않고

팀원이 만든 모델의 내용은 yourapp/models.py 파일에 존재하는 상황이다.

 

 

# myapp/views.py

def post(self, request):
    data = request.data
    r : Review = Review (
        userId = User.objects.get(id=uid),
        ...
    )
    r.save()

이 경우는 받은 데이터를 이용해서 내 모델에 넣으려고 하는데 외래키로 연결되어 있어서

User 모델을 사용해야 하는 경우이다.

 

 

앱 별로 기능을 관리하는 것이 장고의 장점이지만 각 앱에 모델이 작성되면 모델 또한 앱 별로 나눠진다.

따라서 다른 앱의 모델을 사용하기 위해서는 다음의 방법을 사용하면 된다.

# myapp/models.py

from django.db import models
from user.models import User	### 이 부분 추가 ###

class Review(models.Model):
	...
# myapp/views.py

from user.models import User	### 이 부분 추가 ###

class ReviewView(APIView):
	...
    def post(self, request):
        data = request.data
        r : Review = Review (
            userId = User.objects.get(id=1),
            ...
        )
        r.save()

 

장고가 파이썬 언어를 기반으로 하기 때문에

위 방법처럼 다른 앱에 작성된 모델을 import 해서 라이브러리처럼 사용하면 간단하게 해결할 수 있다.