일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 알고리즘 공부방법
- Django Nodejs 차이점
- 장고란
- 표준 입출력
- 매크로
- 이분그래프
- c++
- 입출력 패턴
- scanf
- getline
- string 메소드
- string 함수
- 입/출력
- correlation coefficient
- 자료구조
- double ended queue
- Django란
- UI한글변경
- 백준
- k-eta
- 연결요소
- 프레임워크와 라이브러리의 차이
- iOS14
- vscode
- Django의 편의성
- 시간복잡도
- 엑셀
- 2557
- EOF
- 구조체와 클래스의 공통점 및 차이점
- Today
- Total
Storage Gonie
Django (21) Model Relationships(one to many, many to many 관계) 본문
Django (21) Model Relationships(one to many, many to many 관계)
Storage Gonie 2019. 6. 28. 14:46one to many 혹은 many to one 관계
- ForeignKey를 이용해야함
# 이 관계가 사용되는 예시
- 한 명의 주인이 여러마리의 고양이를 소유하는 경우
- 한 명의 사용자가 여러개의 사진을 올릴 수 있는 경우
- 한명의 사용자가 여러개의 댓글을 소유하는 경우 = 댓글 여러개가 한명의 사용자를 가지는 경우
- 한 개의 사진이 여러개의 댓글을 갖는 경우
- 한개의 사진이 여러개의 좋아요를 갖는(받은) 경우
# 모델을 이용한 이해
- 한명의 주인이 여러마리의 고양이를 소유하는 경우를 모델로 설계하면 아래와 같음
1. Owner 모델 정의
from django.db import models
class Owner(models.Model):
name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
age = models.IntegerField()
2. Cat 모델에 ForeinKey 를 추가해줌
from django.db import models
from . import Owner
class Cat(models.Model):
name = models.CharField(max_length=30)
breed = models.CharField(max_length=20)
grumpy = models.BooleanField(default=False)
owner = models.ForeignKey(Owner, null=True) // Owner의 ID필드값이 들어감
3. Owner 만들기
nicolas = Owner.objects.create(
name = "Nicolas",
last_name = "Serrano",
age = 78
)
4. 고양이들에게 위에서 만든 Owner 할당 해주기
bunns = Cat.objects.get(id=2)
bunns.owner = nicolas
bunns.save()
conrad = Cat.objects.get(id=3)
conrad.owner = nicolas
conrad.save()
5. 아래는 foreign key로 연결된 경우 가능한 것을 보여준다.
1) Cat의 정보에서 Owner의 정보를 얻는 것.
bunns = Cat.objects.get(id=2)
print(bunns.breed) # British
print(bunns.owner.age) # 78 -> foreign key로 연결된 정보를 가져올 수도 있음
2) Owner의 정보에서 Cat의 정보를 얻는 것.
- Django는 자동적으로 modelName_set이라고 불리는 클래스 속성을 만들어 foreign key가 향하는 모델의 속성으로 추가해줌.
- 따라서, Cat 객체 안에 foreign key가 있다면 이 foreign key는 Owner 모델로 향하고 Owner 모델은 새로운 속성을 갖게 된다.
그 이름은 cat_set이다.
nocolas = Owner.objects.get(pk=1)
noco_cats = nocolas.cat_set.all()
many to many 관계
- ManyToManyField를 이용해야함
- ForeignKey는 빈칸으로 비어있으면 안돼서 null=True를 해줬는데,
ManyToManyField는 비어있어도 돼서 아무것도 안해줘도 됨.
# 이 관계가 사용되는 예시
- 다수의 사용자들이 다수의 사용자들을 팔로우 할 수 있는 경우
# 모델을 이용한 이해
- 어떤 한 사용자는 누군가를 팔로잉 할 수 있고, 또 다른 사람은 이 사람을 또 팔로잉 할 수 있을 경우를 모델로 설계하면 아래와 같음.
1. Owner 모델 정의
- many to many 관계, 즉, 팔로우, 팔로잉 기능에서는 User가 User로 향해야 하기 때문에 본인을 향할 수 밖에 없다.
- one to many 혹은 many to one 관계에서 cat_set에 대한 언급이 있었는데,
위에서 cat_set은 실제 테이블에 추가되지는 않았다.
그런데, many to many 관계에서는 이것이 필드로써 실제 테이블에 추가된다.
from django.db import models
class Owner(models.Model):
name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
age = models.IntegerField()
following = models.ManyToManyField('self')
followers = models.ManyToManyField('self')
2. Owner 생성
Owner.objects.create(
name = "Pedro",
last_name = "Gomez",
age = 44
)
Owner.objects.create(
name = "Jisu",
last_name = "Kimchi",
age = 12
)
Owner.objects.create(
name = "Manico",
last_name = "Machiavelli",
age = 44
)
3. Jisu와 Pedro가 Nicolas를 팔로잉 하게함
nicolas = Owner.objects.get(pk=1)
pedro = Owner.objects.get(pk=2)
jisu = Owner.objects.get(pk=3)
nicolas.followers.add(jisu, pedro)
'웹개발 > 인스타 클론 (1) Django' 카테고리의 다른 글
Django (23*) User 모델에 ManyToManyField 추가 (0) | 2019.07.04 |
---|---|
Django (22*) Like 모델 추가, Image, Comment 모델에 ForeignKey 필드추가 (0) | 2019.06.28 |
Django (20*) images앱의 Image, Comment 모델 생성(Abstract base class 이용) (0) | 2019.06.27 |
Django (19*) users앱의 User 모델 설명 및 확장 (0) | 2019.06.26 |
Django (18*) Admin 패널 로그인을 위한 super user 생성 (0) | 2019.06.25 |