일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 장고
- 코딩독학
- 아스키코드
- richtext
- 강원도속초맛집
- FLUTTER
- popupmenubutton
- python3
- Python
- 노마드코더
- 포인터
- DOM
- 건대입구맛집
- JavaScript
- 컴퓨터과학
- 남양주맛집
- 자바
- 정렬알고리즘
- BeautifulSoup
- 상속
- 부스트코스
- 알고리즘
- 추상클래스
- 속초여행
- 가상환경
- removetooltip
- 성수동카페
- pipenv
- Django
- c언어문자열
- Today
- Total
YUYANE
Django / Managers와 QuerySet (related_name) 본문
학습 강의
nomadcoders.co/airbnb-clone/lobby
지금까지 models.py를 통해 데이터 구조도 만들고, 데이터를 불러올 수도, 저장할 수도 있었다. 오늘은 조금 더 깊숙이 들어가 장고가 어떻게 데이터를 관리하고 있는 지 알아보자.
QuerySet
- 데이터베이스에 있는 객체들의 집합
- model의 Manager를 통해 QuerySet을 얻을 수 있다.
Django Managers
- 장고 models는 데이터베이스 쿼리 작업을 할 수 있는 인터페이스를 제공하는데, 이것은 Manager라고 한다.
- 장고 앱의 각각의 모델에는 적어도 하나의 Manager가 존재한다.
- 클래스명.objects를 통해서 Manager를 부를 수 있다.
ex) Person.objects
Manager & QuerySet
- Person.objects.all()는 통해 데이터베이스의 모든 Person 객체들을 반환한다.
- filter()를 통해 원하는 필드값을 가진 객체들만 추출할 수도 있다.
people = Person.objects.all()
Korean = people.filter(country="Korea")
Related Objects
model에 relationship(ForeignKey, OneToOneField, ManyToManyField)를 정의했다면, 그 모델의 객체는 연결된 객체에 접근하는 API를 가진다.
ForeignKey와 related_name
위와 같이 Review 모델에 있는 필드 user가 User 모델에 있는 필드 name 을 ForeignKey를 통해 참조했다고 하자.
- (가만히 있던)User 모델은 queryset에 자신을 참조한 review를 가지고 있다.
- User를 참조하고 있는 모든 Review 객체들을 반환하는 코드는 아래와 같다.
cat.review_set.all()
# cat은 User의 객체
- related_name : 연결된 객체(User)에서 연결하고 있는 객체(Review)를 찾기 위한 이름
name = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='reviews',
)
- 위와 같이 related_name을 입력하면 User에서 'review_set' 대신 'reviews'으로 Review 객체를 찾을 수 있다.
ManyToManyField와 related_name
- 기본 컨셉은 ForiegnKey와 동일
- 쌍 방향으로 객체를 호출할 수 있는 것이 차이점
아래 코드에서 topping.pizza_set , pizza.toppings 모두 가능하다.
class Topping(models.Model):
# ...
pass
class Pizza(models.Model):
toppings = models.ManyToManyField(Topping)
참고
docs.djangoproject.com/en/3.1/ref/models/relations/#django.db.models.fields.related.RelatedManager
docs.djangoproject.com/en/3.1/topics/db/managers/
docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.ForeignKey.related_name
'Framework > DJANGO' 카테고리의 다른 글
Django / Model 메소드 오버라이딩 (0) | 2021.02.25 |
---|---|
Django / MEDIA_ROOT, MEDIA_URL (0) | 2021.02.24 |
Django / Meta Class & Abstract Base Class (0) | 2021.02.23 |
Django / ModelAdmin (0) | 2021.02.23 |
Django / ForeignKey 와 ManyToManyField (0) | 2021.02.23 |