데이터베이스 관계
1. one-to-many
- 작성자와 게시글의 관계. 한명의 작성자는 여러 게시글을 가질 수 있다. 하지만 반대의 경우는 성립 안된다.
2. one-to-one
- 한 사용자당 하나의 프로필의 관계. '데이터 A'와 '데이터 B'가 서로 만나서 중복이 되지 않는 값을 만들어 내는 것
3. many-to-many
- A모델과 B모델이 있을 때 A가 여러 개의 B를 가질 수도 있고 B가 여러 개의 A를 가질 수도 있을 때
many-to-many 연습을 위한 앱 생성
1. 터미널 django-admin startapp restaurant
2. settings.py 파일의 INSTALLED_APP 에 생성된 앱 추가
many-to-many 모델 등록하기
1. restaurant/models.py
# restaurant/models.py
from django.db import models
# Create your models here.
class MyTopping(models.Model):
class Meta:
db_table = "my_topping"
def __str__(self):
return self.topping_name
topping_name = models.CharField(max_length=100)
class MyPizza(models.Model):
class Meta:
db_table = "my_pizza"
def __str__(self):
return self.pizza_name
pizza_name = models.CharField(max_length=100)
pizza_topping = models.ManyToManyField(MyTopping)
2. 모델 데이터베이스에 적용시키기
- python manage.py makemigrations
python manage.py migrate
3. admin 페이지에 추가 (admin.py)
from django.contrib import admin
from .models import MyPizza,MyTopping
# Register your models here.
admin.site.register(MyPizza)
admin.site.register(MyTopping)
4. admin 계정 생성하고 admin에서 확인
- python manage.py createsuperuser
** 저장 오류가 나는 경우 : django 가 createsuperuser 를 잘 인식하지 못함.
=> 데이터베이스 초기화 : 우측 데이터베이스 remove, 좌측 db.sqlite3 delete, 좌측 migration 폴더에서 __init__ 제외하고 모두삭제.
=> 다 지웠으면 migrations 부터 다시 실행하고 superuser 계정 다시만들기
django shell 로 many-to-many 모델 확인해보기
* django shell : Django를 실행하지 않고도 기능들을 사용 할 수 있도록 도와주는 도구
1. 실행 : python manage.py shell
2. 피자 모델에서 토핑 부르기
>>> from restaurant.models import MyTopping, MyPizza
#전체 피자
>>> MyPizza.objects.all()
<QuerySet [<MyPizza: 도미노>, <MyPizza: 피자헛>, <MyPizza: 파파존스>]>
# 피자를 하나씩 불러볼게요
>>> MyPizza.objects.get(pizza_name='도미노')
<MyPizza: 도미노>
# 각 피자의 토핑들을 불러볼게요
>>> MyPizza.objects.get(pizza_name='도미노').pizza_topping.all()
<QuerySet [<MyTopping: 치즈>, <MyTopping: 치킨>]>
- pizza_name 은 models.py 에서 값 들어간 변수 이름
3. 토핑 모델에서 토핑 가진 피자 부르기
>>> from restaurant.models import MyTopping, MyPizza
#전체 토핑
>>> MyTopping.objects.all()
<QuerySet [<MyTopping: 치즈>, <MyTopping: 페퍼로니>, <MyTopping: 올리브>, <MyTopping: 치킨>, <MyTopping: 피망>]>
#각 토핑별로 출력
>>> MyTopping.objects.get(topping_name='치즈')
<MyTopping: 치즈>
# 각 토핑이 들어있는 피자를 불러오기
>>> MyTopping.objects.get(topping_name='치즈').mypizza_set.all()
<QuerySet [<MyPizza: 도미노>, <MyPizza: 피자헛>, <MyPizza: 파파존스>]>
- Many-To-Many 모델은 '서로의 테이블에서' 서로의 데이터를 불러 올 수 있는 것이 특징
'AI 웹 개발 과정 > 파이썬 장고 실무 기초' 카테고리의 다른 글
09. 5주차 이론 - django taggit module (0) | 2022.06.03 |
---|---|
08. 4주차 실습 및 숙제 - (0) | 2022.05.31 |
06. 3주차 실습 및 숙제 - 게시글 쓰기, 읽기, 삭제 / 댓글 추가 (0) | 2022.05.30 |
05. 3주차 이론 - (0) | 2022.05.30 |
04. 2주차 실습 및 숙제 - (1) | 2022.05.27 |