Django crud2
Django Crud課題、Westarbucks課題進行中!
過去の時間だったので見たかったTIL!
過去の時間だったので見たかったTIL!
8. models.py에서 class만들어주기!
예시1)
class Menu(models.Model):
name = models.CharField(max_length=45)
class Meta:
db_table = 'menus'
# Menu라는 클래스, models.Model은 기본값.
# CharField 문자열을 썼고, 최대 길이가 45.
# 테이블 이름을 정해주기 위해 class Meta를 만들고, db_table = 'menus'라고 함.
# 클래스 값은 앞에가 대문자, 테이블값은 소문자.
예시2)
class Category(models.Model):
menu_id = models.ForeignKey('Menu', on_delete = models.CASCADE)
name = models.CharField(max_length=45)
class Meta:
db_table = 'categories'
# Category라는 클래스이며 menu를 참조하고 있는 클래스이다.
# on_delete = models.CASCADE는 Menu클래스가 사라지면 Category클래스도 없어진다는 뜻!
예시3)
class Product(models.Model):
category_id = models.ForeignKey('Category', on_delete = models.CASCADE)
korean_name = models.CharField(max_length = 45)
english_name = models.CharField(max_length = 45)
description = models.TextField()
nutrition_id = models.ForeignKey('Nutrition', on_delete = models.CASCADE)
allergy = models.ManyToManyField('Allergy', through = "AllergyProduct")
class Meta:
db_table = 'products'
# Product 클래스, Category와 Nutrition을 참조하고 있는 클래스.
# 중요한게 Allergy클래스와 다대다 관계이기 때문에 두 클래스 중 하나에 models.ManyToManyField('Allergy', through = "AllergyProduct") <- 이런식으로 연결해주는 식을 적어 주어야한다. 여기서 AllergyProduct는 중간테이블.
예시4)
class AllergyProduct(models.Model):
allergy = models.ForeignKey('Allergy', on_delete = models.CASCADE)
product = models.ForeignKey('Product', on_delete = models.CASCADE)
class Meta:
db_table : "allergyproducts"
# 예시3에서 말한 중간테이블이며 따로 이렇게 적어주지 않을 경우, Django가 임의로 정하기 때문에 꼭 넣어주어야하는 테이블!
9. migrations와 migrate.
데이터베이스에 테이블을 저장해주는 방법이라고 생각하면됨.
python manage.py makemigrations # 메인 디렉토리에서 진행.
python manage.py migrate #요것도 메인 디렉토리에서.
10. MySQL
앞서 4번 과정에서 접속했던 MySQL에서 내가 만든 테이블들 다 볼 수 있다.
Command+D하면 terminal창 하나 더 열기
Shift+Command+D하면 terminal창 밑으로 하나 더 열기
show databases;
use 내db명;
show tables;
select * from table_name;
desc table_name;
exit
# terminal창 끈다고 끈거 아니니까 exit 한번더 눌러주고 끄기
# shell에서 create해주어야 빈테이블에 값이 생긴다.
# ; 요것 잊어버리지 말기!
11. 내부 데이터 입력(Shell활용)
python manage.py shell
from 앱이름.models import Class_name1, Class_name2...
#요 두개 세팅 꼭해주기
Product.objects.create(name = '상품')
#클래스명.objects.(create,get...)(값 입력)
Product.objects.filter(id=3).delete()
#삭제값.
a = Product.objects.get(id=1)
a.one_serving_kcal = 140kcal
a.save()
# 수정하기.
a = Product.objects.get(id=1)
Category.objects.create(name = '프라푸치노', menu = a)
# 변수활용해주어서 get으로 값얻고, foreign key 값 가진 클래스에 넣어주기
12. 수정?
혹시라도 models.py에 수정사항이 생기면 수정해주고 나서
migrations와 migrate를 꼭꼭 챙겨서 해주어야 업데이트가 됨! 잊지말기~
Reference
この問題について(Django crud2), 我々は、より多くの情報をここで見つけました https://velog.io/@majaeh43/Django-crud2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol