기본 코드
class Director(models.Model):
name = models.TextField()
debut = models.DateTimeField()
country = models.TextField()
class Genre(models.Model):
title = models.TextField()
class Movie(models.Model):
director = models.ForeignKey(Director,on_delete=models.CASCADE)
genre = models.ForeignKey(Genre,on_delete=models.CASCADE)
title = models.TextField()
opening_date = models.DateField()
running_time = models.IntegerField()
screening = models.BooleanField()# 가상환경 실행 확인 후 아래 명령어를 터미널에 입력합니다.
python manage.py makemigrations
python manage.py migratedirectors = [
("봉준호","1993-01-01","KOR"),
("김한민","1999-01-01","KOR"),
("최동훈","2004-01-01","KOR"),
("이정재","2022-01-01","KOR"),
("이경규","1992-01-01","KOR"),
("한재림","2005-01-01","KOR"),
("Joseph Kosinski","1999-01-01","KOR"),
("김철수","2022-01-01","KOR"),
]
for director in directors:
name_ = director[0]
debut_ = director[1]
country_ = director[2]
Director.objects.create(name=name_, debut=debut_, country=country_)
genres = ["액션","드라마","사극","범죄","스릴러","SF","무협","첩보","재난"]
for title_ in genres:
genre = Genre()
genre.title = title_
genre.save()출력 예시
id : 1
name : 봉준호
debut : 1993-01-01 00:00:00
country : KOR
코드 작성
bong = Director.objects.get(id=1)
print(f'id : {bong.id}\nname : {bong.name}\ndebut : {bong.debut}\ncountry : {bong.country}')출력 예시
id : 2
title : 드라마
코드 작성
drama = Genre.objects.get(title="드라마")
print(f'id : {drama.id}\ntitle : {drama.title}')| director | genre | title | opening_data | running_time | screening |
|---|---|---|---|---|---|
| 봉준호 | 드라마 | 기생충 | 2019-05-30 | 132 | False |
힌트 코드
director_ = Director.objects.get(name='봉준호')
genre_ = Genre.objects.get(title='드라마')
movie = Movie()
# 나머지 코드를 완성시켜주세요.
# ...
# ...
movie.save()코드 작성
# class Movie(models.Model):
# director = models.ForeignKey(Director,on_delete=models.CASCADE)
# genre = models.ForeignKey(Genre,on_delete=models.CASCADE)
# title = models.TextField()
# opening_date = models.DateField()
# running_time = models.IntegerField()
# screening = models.BooleanField()
# 시작
movie = Movie()
# 객체로 저장된 director_, genre_ 다루기
director_ = Director.objects.get(name='봉준호')
movie.director = director_
genre_ = Genre.objects.get(title='드라마')
movie.genre = genre_
# 나머지 title, opening_date, running_time, screening 는 값으로 다루기
movie.title = "기생충"
movie.opening_date = "2019-05-30"
movie.running_time = 132
movie.screening = False
# DB에 반영
movie.save()
-------- 테스트용 코드 --------
movie = Movie()
director_ = Director.objects.get(name='봉준호')
movie.director = director_
genre_ = Genre.objects.get(title='드라마')
movie.genre = genre_
movie.title = "기생충"
movie.opening_date = "2019-05-30"
movie.running_time = 132
movie.screening = False
movie.save()| director | genre | title | opening_date | running_time | screening |
|---|---|---|---|---|---|
| 봉준호 | 드라마 | 괴물 | 2006-07-27 | 119 | False |
| 봉준호 | SF | 설국열차 | 2013-10-30 | 125 | False |
| 김한민 | 사극 | 한산 | 2022-07-27 | 129 | True |
| 최동훈 | SF | 외계+인 | 2022-07-20 | 142 | False |
| 이정재 | 첩보 | 헌트 | 2022-08-10 | 125 | True |
| 이경규 | 액션 | 복수혈전 | 1992-10-10 | 88 | False |
| 한재림 | 재난 | 비상선언 | 2022-08-03 | 140 | True |
| Joseph Kosinski | 액션 | 탑건 : 매버릭 | 2022-06-22 | 130 | True |
movies = [
("봉준호", "드라마", "괴물", "2006-07-27", 119, False),
("봉준호", "SF", "설국열차", "2013-10-30", 125, False),
("김한민", "사극", "한산", "2022-07-27", 129, True),
("최동훈", "SF", "외계+인", "2022-07-20", 142, False),
("이정재", "첩보", "헌트", "2022-08-10", 125, True),
("이경규", "액션", "복수혈전", "1992-10-10", 88, False),
("한재림", "재난", "비상선언", "2022-08-03", 140, True),
("Joseph Kosinski", "액션", "탑건 : 매버릭", "2022-06-22", 130, True),
]코드 작성
movies = [
("봉준호", "드라마", "괴물", "2006-07-27", 119, False),
("봉준호", "SF", "설국열차", "2013-10-30", 125, False),
("김한민", "사극", "한산", "2022-07-27", 129, True),
("최동훈", "SF", "외계+인", "2022-07-20", 142, False),
("이정재", "첩보", "헌트", "2022-08-10", 125, True),
("이경규", "액션", "복수혈전", "1992-10-10", 88, False),
("한재림", "재난", "비상선언", "2022-08-03", 140, True),
("Joseph Kosinski", "액션", "탑건 : 매버릭", "2022-06-22", 130, True),
]
for i in movies:
movie = Movie()
dir_ = Director.objects.get(name=i[0])
gen_ = Genre.objects.get(title=i[1])
tit_ = i[2]
ope_ = i[3]
run_ = i[4]
scr_ = i[5]
movie.director = dir_
movie.genre = gen_
movie.title = tit_
movie.opening_date = ope_
movie.running_time = run_
movie.screening = scr_
movie.save()
예시 출력
Director object (1) Genre object (2) 기생충 2019-05-30 132 False
Director object (1) Genre object (2) 괴물 2006-07-27 119 False
Director object (1) Genre object (6) 설국열차 2013-10-30 125 False
Director object (2) Genre object (3) 한산 2022-07-27 129 True
Director object (3) Genre object (6) 외계+인 2022-07-20 142 False
Director object (4) Genre object (8) 헌트 2022-08-10 125 True
Director object (5) Genre object (1) 복수혈전 1992-10-10 88 False
Director object (6) Genre object (9) 비상선언 2022-08-03 140 True
Director object (7) Genre object (1) 탑건 : 매버릭 2022-06-22 130 True
코드 작성
see_all = Movie.objects.all()
for i in see_all:
dir_obj = Director.objects.get(id=i.director_id)
gen_obj = Genre.objects.get(id=i.genre_id)
print(dir_obj, gen_obj, i.title, i.opening_date, i.running_time, i.screening)
-------- 다른 코드 --------
for i in Movie.objects.all():
print(i.director, i.genre, i.title, i.opening_date, i.running_time, i.screening)힌트 : 각각의 Director object (n)는 Director 모델의 인스턴스입니다.
예시 출력
봉준호 Genre object (2) 기생충 2019-05-30 132 False
봉준호 Genre object (2) 괴물 2006-07-27 119 False
봉준호 Genre object (6) 설국열차 2013-10-30 125 False
김한민 Genre object (3) 한산 2022-07-27 129 True
최동훈 Genre object (6) 외계+인 2022-07-20 142 False
이정재 Genre object (8) 헌트 2022-08-10 125 True
이경규 Genre object (1) 복수혈전 1992-10-10 88 False
한재림 Genre object (9) 비상선언 2022-08-03 140 True
Joseph Kosinski Genre object (1) 탑건 : 매버릭 2022-06-22 130 True
코드 작성
see_name_all = Movie.objects.all()
for i in see_name_all:
dir_obj = Director.objects.get(id=i.director_id)
gen_obj = Genre.objects.get(id=i.genre_id)
print(dir_obj.name, gen_obj, i.title, i.opening_date, i.running_time, i.screening)
-------- 다른 코드 --------
for i in Movie.objects.all():
print(i.director.name, i.genre, i.title, i.opening_date, i.running_time, i.screening)힌트 : 각각의 Genre object (n)는 Genre 모델의 인스턴스입니다.
예시 출력
봉준호 드라마 기생충 2019-05-30 132 False
봉준호 드라마 괴물 2006-07-27 119 False
봉준호 SF 설국열차 2013-10-30 125 False
김한민 사극 한산 2022-07-27 129 True
최동훈 SF 외계+인 2022-07-20 142 False
이정재 첩보 헌트 2022-08-10 125 True
이경규 액션 복수혈전 1992-10-10 88 False
한재림 재난 비상선언 2022-08-03 140 True
Joseph Kosinski 액션 탑건 : 매버릭 2022-06-22 130 True
코드 작성
see_all = Movie.objects.all()
for i in see_all:
dir_obj = Director.objects.get(id=i.director_id)
gen_obj = Genre.objects.get(id=i.genre_id)
print(dir_obj.name, gen_obj.title, i.title, i.opening_date, i.running_time, i.screening)
-------- 다른 코드 --------
for i in Movie.objects.all():
print(i.director.name, i.genre.title, i.title, i.opening_date, i.running_time, i.screening)예시 출력
이정재 첩보 헌트 2022-08-10 125 True
한재림 재난 비상선언 2022-08-03 140 True
김한민 사극 한산 2022-07-27 129 True
최동훈 SF 외계+인 2022-07-20 142 False
Joseph Kosinski 액션 탑건 : 매버릭 2022-06-22 130 True
봉준호 드라마 기생충 2019-05-30 132 False
봉준호 SF 설국열차 2013-10-30 125 False
봉준호 드라마 괴물 2006-07-27 119 False
이경규 액션 복수혈전 1992-10-10 88 False
코드 작성
see_all = Movie.objects.order_by('-opening_date')
for i in see_all:
dir_obj = Director.objects.get(id=i.director_id)
gen_obj = Genre.objects.get(id=i.genre_id)
print(dir_obj.name, gen_obj.title, i.title, i.opening_date, i.running_time, i.screening)
-------- 다른 코드 --------
for i in Movie.objects.order_by('-opening_date'):
print(i.director.name, i.genre.title, i.title, i.opening_date, i.running_time, i.screening)예시 출력
이경규 액션 복수혈전 1992-10-10 88 False
코드 작성
date_order = Movie.objects.order_by('opening_date')
for i in date_order:
dir_obj = Director.objects.get(id=i.director_id)
gen_obj = Genre.objects.get(id=i.genre_id)
print(dir_obj.name, gen_obj.title, i.title, i.opening_date, i.running_time, i.screening)
break
-------- 다른 코드 --------
first_ = Movie.objects.order_by('opening_date')[0]
print(first_.director.name, first_.genre.title, first_.title, first_.opening_date, first_.running_time, first_.screening)상영 중
screening = True
예시 출력
Joseph Kosinski 액션 탑건 : 매버릭 2022-06-22 130 True
김한민 사극 한산 2022-07-27 129 True
한재림 재난 비상선언 2022-08-03 140 True
이정재 첩보 헌트 2022-08-10 125 True
코드 작성
scr_on = Movie.objects.filter(screening=True).order_by('opening_date')
for i in scr_on:
dir_obj = Director.objects.get(id=i.director_id)
gen_obj = Genre.objects.get(id=i.genre_id)
print(dir_obj.name, gen_obj.title, i.title, i.opening_date, i.running_time, i.screening)
-------- 다른 코드 --------
scr_on = Movie.objects.filter(screening=True).order_by('opening_date')
for i in scr_on:
print(i.director.name, i.genre.title, i.title, i.opening_date, i.running_time, i.screening)힌트 :
name이 봉준호인 Director의 인스턴스가 필요합니다.
예시 출력
봉준호 드라마 괴물 2006-07-27 119 False
봉준호 SF 설국열차 2013-10-30 125 False
봉준호 드라마 기생충 2019-05-30 132 False
코드 작성
bongs = Movie.objects.filter(director_id=1).order_by('opening_date')
for i in bongs:
dir_obj = Director.objects.get(id=i.director_id)
gen_obj = Genre.objects.get(id=i.genre_id)
print(dir_obj.name, gen_obj.title, i.title, i.opening_date, i.running_time, i.screening)
-------- 다른 코드 --------
bongs = Director.objects.get(name='봉준호')
bongss = Movie.objects.filter(director=bongs).order_by('opening_date')
for i in bongss:
print(i.director.name, i.genre.title, i.title, i.opening_date, i.running_time, i.screening)예시 출력
봉준호 SF 설국열차 2013-10-30 125 False
코드 작성
bongs = Director.objects.get(name='봉준호')
bongss = Movie.objects.filter(director=bongs).order_by('opening_date')[1]
print(bongss.director.name, bongss.genre.title, bongss.title, bongss.opening_date, bongss.running_time, bongss.screening)예시 출력
봉준호 SF 설국열차 2013-10-30 125 False
이정재 첩보 헌트 2022-08-10 125 True
김한민 사극 한산 2022-07-27 129 True
Joseph Kosinski 액션 탑건 : 매버릭 2022-06-22 130 True
봉준호 드라마 기생충 2019-05-30 132 False
한재림 재난 비상선언 2022-08-03 140 True
최동훈 SF 외계+인 2022-07-20 142 False
코드 작성
run_gt_119 = Movie.objects.filter(running_time__gt=119).order_by('running_time')
for i in run_gt_119:
dir_obj = Director.objects.get(id=i.director_id)
gen_obj = Genre.objects.get(id=i.genre_id)
print(dir_obj.name, gen_obj.title, i.title, i.opening_date, i.running_time, i.screening)
-------- 다른 코드 --------
run_gt_119 = Movie.objects.filter(running_time__gt=119).order_by('running_time')
for i in run_gt_119:
print(i.director.name, i.genre.title, i.title, i.opening_date, i.running_time, i.screening)예시 출력
봉준호 드라마 괴물 2006-07-27 119 False
봉준호 SF 설국열차 2013-10-30 125 False
이정재 첩보 헌트 2022-08-10 125 True
김한민 사극 한산 2022-07-27 129 True
Joseph Kosinski 액션 탑건 : 매버릭 2022-06-22 130 True
봉준호 드라마 기생충 2019-05-30 132 False
한재림 재난 비상선언 2022-08-03 140 True
최동훈 SF 외계+인 2022-07-20 142 False
코드 작성
run_gte_119 = Movie.objects.filter(running_time__gte=119).order_by('running_time')
for i in run_gte_119:
dir_obj = Director.objects.get(id=i.director_id)
gen_obj = Genre.objects.get(id=i.genre_id)
print(dir_obj.name, gen_obj.title, i.title, i.opening_date, i.running_time, i.screening)
-------- 다른 코드 --------
run_gte_119 = Movie.objects.filter(running_time__gte=119).order_by('running_time')
for i in run_gte_119:
print(i.director.name, i.genre.title, i.title, i.opening_date, i.running_time, i.screening)예시 출력
Joseph Kosinski 액션 탑건 : 매버릭 2022-06-22 130 True
최동훈 SF 외계+인 2022-07-20 142 False
김한민 사극 한산 2022-07-27 129 True
한재림 재난 비상선언 2022-08-03 140 True
이정재 첩보 헌트 2022-08-10 125 True
코드 작성
open_gt = Movie.objects.filter(opening_date__gt='2022-01-01').order_by('opening_date')
for i in open_gt:
dir_obj = Director.objects.get(id=i.director_id)
gen_obj = Genre.objects.get(id=i.genre_id)
print(dir_obj.name, gen_obj.title, i.title, i.opening_date, i.running_time, i.screening)
-------- 다른 코드 --------
open_gt = Movie.objects.filter(opening_date__gt='2022-01-01').order_by('opening_date')
for i in open_gt:
print(i.director.name, i.genre.title, i.title, i.opening_date, i.running_time, i.screening)힌트 :
Movie.objects.filter(조건1, 조건2,...)이 코드는WHERE 조건1 AND 조건2와 동일합니다.
예시 출력
봉준호 드라마 괴물 2006-07-27 119 False
봉준호 드라마 기생충 2019-05-30 132 False
코드 작성
bongs = Director.objects.get(name='봉준호')
dramas = Genre.objects.get(title='드라마')
ordered = Movie.objects.filter(director=bongs, genre=dramas).order_by('opening_date')
for i in ordered:
print(i.director.name, i.genre.title, i.title, i.opening_date, i.running_time, i.screening)힌트 :
filter와 반대되는 메소드로exclude가 있습니다.
참고 사이트
[Django] QuerySet 메소드 정리 (2) - CRUD
예시 출력
이경규 액션 복수혈전 1992-10-10 88 False
Joseph Kosinski 액션 탑건 : 매버릭 2022-06-22 130 True
최동훈 SF 외계+인 2022-07-20 142 False
김한민 사극 한산 2022-07-27 129 True
한재림 재난 비상선언 2022-08-03 140 True
이정재 첩보 헌트 2022-08-10 125 True
코드 작성
bongs = Director.objects.get(name='봉준호')
not_bongs = Movie.objects.exclude(director=bongs).order_by('opening_date')
for i in not_bongs:
print(i.director.name, i.genre.title, i.title, i.opening_date, i.running_time, i.screening)