[Django] C.R.U.D (2) Assignment Intro

juri·2021년 7월 20일
0

Django

목록 보기
5/11
post-thumbnail

과제 중 등장한 새로운 개념들을 정리해보았다.

🦝 DateField

파이썬에서 날짜(Date)는 datetime.date의 객체로 표현된다.

field_name = DateField()

#오늘 날짜를 저장
datetime.date.today() 
#괄호 안의 숫자를 날짜로 저장
datetime.date(2021,7,20)

영화의 개봉날짜를 저장하기 위해서 사용했다.

 a = Movie(title = '기생충',
 	   release_date = datetime.date(2019,5,30)
           running_time = 132)
 a.save()

🦝 ManyToManyField

field_name = ManyToManyField(object)

장고가 ManyToManyField를 인식하고 다대다 관계의 테이블 사이에 중간 테이블을 생성해준다. 이 필드값은 FK로 참조하는 테이블이 갖는다. (*topping -> pizza)
ForeignKey와 동일하게 작동한다.

🦝 역참조 데이터 호출

ForeignKeyManyToManyField를 갖는 1대1 혹은 다대다 관계의 테이블 사이의 데이터는 참조, 역참조를 사용해서 현재 테이블의 객체에서 다른 테이블의 객체를 호출할 수 있다.
역참조를 이용한 호출 방법 두가지를 소개한다.

1. _set

참고 : 참조 방향 ( actor -> movie )

#역참조
movie.actor_set.all()
#참조
actor.movies.all()

역참조 키값은 기본으로 클래스 이름을 소문자로 한 문자열이다. 위의 예시에서는 'actor'이 해당한다.

models.py에서 field값을 정의할 때 ForeignKey와 ManyToManyField에 related_name 을 설정할 수 있다. 설정한 값은 역참조 키값이 된다.

#related_name = actors
movie.actors.all()

1번의 movie.actor_set.all()과 같다. 단지, actor_set이 actors 로 정의된 것 뿐이다.

🦝 RelatedManager

역참조를 이용해서 상호관계가 있는 데이터를 생성, 추가, 삭제 할 수 있다.

  • Add
a = Movie.objects.get(title='부산행')
b = Actor.objects.get(name ='정유미')
a.actor_set.add(a)

DB로 save하는 과정은 필요없으며 이미 존재하는 객체 사이에 관계를 생성한다.

  • Create
a = Movie.objects.get(title='부산행')
b = a.actor_set.create(name='정유미', ..)
#혹은
a = Movie.objects.get(title='부산행')
b = Actor(name='정유미',... ,movie=a)
b.save()

movie는 Actor 클래스가 갖는 Movie클래스에 대한 ManyToManyField 값이다.

  • Remove
a = Movie.objects.get(title='부산행')
b = Actor.objects.get(name='정유미')
a.actor_set.remove(b)
  • Clear
    상호관계를 갖는 모든 객체를 삭제한다.
profile
Make my day !

0개의 댓글