django shell機能1:1:mM:nについて


1. 1:1


2. many to 1


3. many to many


1.1列の作成

1. 자동저장
create() 메소드를 이용하여 메뉴라는 테이블에 음료 컬럼 추가 
>>> Menu.objects.create(name="음료")
create() 메소드를 이용하여 메뉴라는 테이블에 푸드 컬럼 추가 
>>> Menu.objects.create(name="푸드")


2. 수동 저장( 1:m 할 때 사용 )

카드 메뉴 생성 save()메소드 이용
>>> a3 = Menu(name="상품")
>>> a3.save()


>>> a4 = Menu(name="카드")
>>> a4.save()


3. 배열을 이용하여 동시에 여러개의 컬럼을 추가 하는 방법 
>>> a1 = Menu(name="음료")
>>> a2 = Menu(name="푸드") 
>>> Menu.objects.bulk_create([a1, a2])

mysql-server에서 확인 
>>> SELECT * FROM menus;

1.2列確認

get = 하나의 컬럼만 보여준다 

get 메소드를 사용하여 Menu 테이블에 이름이 음료인것을 보여줘라
>>> Menu.objects.get(name="음료")

get 메소드를 사용하여 Menu 테이블에 고유한 id 값이 1번인 것을 보여줘라여줘라 
>>> Menu.objects.get(id=1)

2.1多対一方式

외래키를 사용하여 다른 테이블을 참조할때 방식은 좀 다르다 

먼저 해당하는 메뉴를 READ 한 뒤, 카테고리 생성 시 menu 에 지정해준다.

>>> a1 = Menu.objects.get(name="음료")
>>> Category.objects.create(name="콜드 브루 커피", menu=a1)

방금 콜드브루 커피가 메뉴 테이블을 참조하는것을 확인

>>> b1 = Category.objects.get(name="콜드 브루 커피")
>>> b1.menu.id


>>> a1 = Menu.objects.get(name="음료")
>>> Category.objects.create(name="블렌디드", menu=a1)

>>> a2 = Menu.objects.get(name="푸드")
>>> Category.objects.bulk_create([Category(name="브레드", menu=a2), Category(name="케이크", menu=a2)])

3.1多様な方式

1. 카테고리 테이블 전부 출력 

>>> Category.objects.all()

2. 카테고리에서 음료메뉴의 테이블을 참조하고 있는 데이터만 추출

>>> Category.objects.filter(menu_id=1)

OR

>>> Category.objects.filter(menu__name="음료")


Category 데이터 중 푸드 Menu 를 참조하고 있는 데이터만 출력 | filter() 메소드 사용

>>> Category.objects.filter(menu_id=2)

OR

>>> Category.objects.filter(menu__name="푸드")


푸드 Menu 를 참조하고 있는 모든 데이터들의 name 값을 출력 | filter(), for 문 사용

>>> for category in Category.objects.filter(menu__name="푸드"):
		    print(category.name)
 
 음료 메뉴를 참조하고 있는 모든 카테고리 출력 (QuerySet 의 형태로)
 >>> a1 = Menu.objects.get(name="음료")
>>> a1.category_set.all()
 
 음료 메뉴를 참조하고 있는 모든 카테고리 개수 출력 | count() 메소드 사용
>>> a1 = Menu.objects.get(name="음료")
>>> a1.category_set.count() 
 
 블렌디드 카테고리가 참조하고 있는 메뉴의 name 값을 출력
 >>> c2 = Category.objects.get(name="블렌디드")
>>> c2.menu.name