Django C.R.U.D 1 - (2) App 생성 & models.py 작성

minch·2021년 7월 17일
1

Django

목록 보기
6/16
post-thumbnail

Django Application 생성

main branch를 github에 push한 다음,
새로운 branch를 생성하여 django app을 만든다.

git branch feature/crud # branch 생성
git checkout feature/crud # 해당 branch로 이동

feature/crud branch를 만든 후, 이동하여 app을 시작한다는 명령어를 입력한다.

python manage.py startapp products

products라는 app을 만들고, settings.py에 app을 추가했다는 것을 알려주어야 한다.

settings.py

INSTALLED_APPS = [
	...
    'products',
]

models.py 작성

그 다음으로 starbucks 홈페이지를 참고하여서 미리 AqueryTools 안에 만들어놓은 ERD를 보고, models.py 안에 내용을 작성해 볼 것이다.

예를 들어, ERD가

이런 식으로 이루어져 있다면, 이것을 보고 models.py 안에 클래스를 작성해주어야 한다.

models.py

class Menu(models.Model):
    name = models.CharField(max_length=45)
    #id 속성을 따로 추가 안해도 django에서 자체적으로 pk, 자동증가값을 설정해줌

    class Meta:
        db_table = 'menus'  # DB안에 TABLE의 이름을 설정해줌 

class Category(models.Model):
    name = models.CharField(max_length=45)
    menu = models.ForeignKey('Menu', on_delete=models.CASCADE)

    class Meta:
        db_table = 'categories'

class Product(models.Model):
    kor_name = models.CharField(max_length=45)
    eng_name = models.CharField(max_length=45)
    description = models.TextField()
    category = models.ForeignKey('Category', on_delete=models.CASCADE)
    nutrition = models.ForeignKey('Nutrition', on_delete=models.CASCADE)

    class Meta:
        db_table = 'products'

Django Model(models.py)?

class는 Database의 Table에,
그 안에 name, menu, kor_name과 같이 지정된 attribute들은 Database의 column에 매핑된다.

이렇게 Model과 Database를 매핑하는 것을 ORM(Object Relational Mapping)이라고 한다.

작성한 models.py를 Database에 적용시키기 위해
먼저 migration 파일(설계도)를 먼저 만들어야 하는데,

python manage.py makemigrations products

명령어를 입력하면, products에서 models.py에 입력했던 것들이 migration 파일로 생성이 된다.

그 후, migration 파일을 Database에 migrate하여 적용시키면 완료된다.

python manage.py migrate

models.py에 내용이 생성되거나 수정될때마다 migration, migrate 작업을 해주어야 DB에 적용이 된다.

적용된 것을 확인하려면,
mysql을 실행시켜 해당 DB에 접근하여 class에 맞는 TABLE이 생성되었다면 잘 적용이 된 것이다.

mysql -u root -p
mysql> SHOW DATABASES;

mysql> USE Westarbucks; # 해당하는 DB 이름
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_westarbucks |
+-----------------------+
| categories            |
| django_content_type   |
| django_migrations     |
| django_session        |
| menus                 |
| products              |
+-----------------------+
6 rows in set (0.00 sec)

위에서 작성했던 class (Menu, Category, Product)에 대한 TABLE들이 잘 생성된 것을 확인할 수 있다.

그 후에 ERD에 있는 나머지를 class Image, Allergy, Allergy_Product, Nutrition 으로 만들어서 매핑하여 TABLE로 만들었다.

+-----------------------+
| Tables_in_westarbucks |
+-----------------------+
| allergies             |
| allergies_products    |
| categories            |
| django_content_type   |
| django_migrations     |
| django_session        |
| images                |
| menus                 |
| nutritions            |
| products              |
+-----------------------+
10 rows in set (0.00 sec)

1개의 댓글

comment-user-thumbnail
2021년 7월 18일

블로그 항상 잘 보고있습니다~ 감사합니다 ^_^

답글 달기