# oop 인스턴스와 연결된 enrolment 객체 조회 가능 oop.enrolment_set.all()
# enrolments oop.enrolments
Enrolment 객체 생성
아래 테이블에 정리된대로, Enrolment 객체를 생성해 줍시다.
EnrolmentID
Student
Course
enrolled_date
finished_date
academic_record
1
djangojeng-e
Object-Oriented Programming
2020.04.20
2
Jennifer Lawrence
Object-Oriented Programming
2020.04.20
3
Will Smith
Systems Programming
2019.04.21
2020.04.21
A
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# import datetime 을 먼저 하고 명령어를 실행해줘야 합니다.
In [9]: e1 = Enrolment(student=djangojeng_e, course=oop, enrolled_date=datetime.datetime(2020, 4, 20)) In [10]: e1.save()
In [11]: oop.enrolments.all() Out[11]: <QuerySet [<Student: 장고쟁이>]>
In [12]: djangojeng_e.course_set.all() # 장고쟁이 학생에 관련된 course 를 조회하려면, course_set.all() 하면 됩니다. # 참고로, djangojeng_e.enrolment_set.all() 하면, enrol 된 객체가 조회 됩니다. Out[12]: <QuerySet [<Course: 객체지향 프로그래밍>]>
1 2 3 4 5 6 7 8 9 10 11
In [15]: e2 = Enrolment.objects.create(student=jennifer, course=oop, enrolled_date=datetime.datetime(2020, 4, 20))
Out[23]: <QuerySet [<Student: 장고쟁이>, <Student: Jennifer Lawrence>, <Student: Will Smith>]>
remove() 사용하기
1 2 3 4 5 6 7 8
# oop 에서 장고쟁이 빼기
In [25]: object_oriented_programming.enrolments.all() Out[25]: <QuerySet [<Student: 장고쟁이>, <Student: Jennifer Lawrence>, <Student: Arya Stark>]>
In [26]: object_oriented_programming.enrolments.remove(djangojeng_e) In [27]: object_oriented_programming.enrolments.all() Out[27]: <QuerySet [<Student: Jennifer Lawrence>, <Student: Arya Stark>]>
many-to-many 로 관계된 모델들의 속성을 사용하여
쿼리 생성하기
1 2 3 4
# 과목중에서, 수강중인 학생 이름이 will 로 시작하는 과목 찾기
In [28]: Course.objects.filter(enrolments__name__startswith='Will') Out[28]: <QuerySet [<Course: Systems Programming>, <Course: Algorith Design>]>
중간 모델을 사용하여, 쿼리 작성하기
Student 가 중간 모델을 이용해서, 찾고자 하는 데이터를 조회
1 2 3 4 5 6 7 8 9
# Student 중에서, 아래 조건들을 충족하는 데이터 검색 # 수강 과목 이름이 "Systems Programming' 인것 # 수강 시작 날짜가 2018년 4월 19일 이후인것들을 조회
In [30]: Student.objects.filter( ...: course__name='Systems Programming', ...: enrolment__enrolled_date__gte=datetime.datetime(2018, 4, 19))
Out[30]: <QuerySet [<Student: Will Smith>, <Student: John Snow>]>
Enrolment 의 정보를 바로 접근
Enrolment 모델에 직접 쿼리를 사용해서 데이터를 조회할수 있습니다
1 2 3 4 5 6 7 8 9
In [32]: will_enrolment = Enrolment.objects.get(course=systems_programming, student=will) In [33]: will_enrolment.enrolled_date Out[33]: datetime.datetime(2019, 4, 19, 0, 0, tzinfo=<UTC>)
In [34]: will_enrolment.finished_date Out[34]: datetime.datetime(2020, 4, 20, 0, 0, tzinfo=<UTC>)
In [35]: will_enrolment.academic_record Out[35]: 'A'
Student 객체에서부터, enrolment 에 접근하는 many-to-many reverse
1 2 3 4 5 6 7 8 9 10
n [36]: will_enrolment = will.enrolment_set.get(course=systems_programming)
In [37]: will_enrolment.enrolled_date Out[37]: datetime.datetime(2019, 4, 19, 0, 0, tzinfo=<UTC>)
In [38]: will_enrolment.finished_date Out[38]: datetime.datetime(2020, 4, 20, 0, 0, tzinfo=<UTC>)
In [39]: will_enrolment.academic_record Out[39]: 'A'
reverse, back_ward relationship, forward relationship 에 대한 정리도 필요할것으로 보입니다!