당신은 멋쟁이, 우리는 장고쟁이~

0%

Django Models 10편 - Fields (Models across files)

파일사이에 모델들


다른 앱에 존재하는 모델끼리 관계를 형성해도 괜찮습니다.

다른 앱에 존재하는 모델을 사용하려면, 관계된 모델을 파일 상단에 가져와서 사용합니다.


다른 모델 클래스를 가져온 다음에는, 필요한곳에 사용하면 됩니다.


공식문서에서는 예시가 많이 빈약한데, 프로젝트 구조가 아래처럼 되어 있다고 가정합니다.


order 라는 앱이 있고, product 라는앱이 있습니다


이런 구조안에서, order/models.py 파일에서, product/models.py 에 있는 모델을

가져다 사용할수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
├── config
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── manage.py
├── order
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── __init__.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── product
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── __init__.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   └── views.py


예시


파일 상단에, 다른 앱에 존재하는 클래스를 가져와서 사용하면 됩니다.


1
2
3
4
5
6
7
8
from django.db import models
from order.models import Order

# order 앱에 있는 models.py 에서 Order 라는 모델을 불러옴

class Product(models.Model):
# ...
order = models.ForeignKey(Order, on_delete=models.CASCADE)

공식문서 예시


공식문서 예시에서는, geography 에 있는 models 를 불러오고, 그 안에 있는 ZipCode 클래스를 가져와서 사용하는것을 보여주고 있습니다.


1
2
3
4
5
6
7
8
9
10
11
from django.db import models 
from geography.models import ZipCode


class Restaurant(models.Model):
# ...
zip_code = models.ForeignKey(
ZipCode, on_delete=models.SET_NULL,
blank=True,
null=True,
)

파일 상단에 다른 앱에 존재하는 모델을 불러오기 위해서는, 아래 형식으로 불러와주면 됩니다.


from <앱이름>.models import <가져올클래스이름>