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',
]
그 다음으로 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)
블로그 항상 잘 보고있습니다~ 감사합니다 ^_^