Django | C.R.U.D Wrap-up

celeste·2022년 4월 13일
0

Django Basics

목록 보기
6/7
post-thumbnail
ForeignKey('Owner', on_delete=cascade)

ForeignKey 참조할때, 'Owner'로도 할 수있고, owner도 할 수 있는데, 클래스 참조는 string으로 할 것을 권장한다.

역참조 사용하기

정참조와 역참조 객체 호출

  • 정참조의 경우 : 속성으로 접근
  • 역참조의 경우 : _set 또는 related_name 으로 접근
# 역참조 _set
dogs = owner.dog_set.all()

# 역참조 related_name(FK에 지정)
dogs = owner.dogs.all()

ManytoMany

  • ManyToManyField를 사용할 경우 자동으로 중간 테이블을 설정해준다.
    • 다만 Django에서 만든 중간테이블 사용시 조작이 어렵다.
    • 중간테이블을 따로 만들어주고, 내가 만든 테이블을 쓴다고 through = 에 지정해준다.
  • ManyToManyField 양쪽 어디에나 추가해도 되지만, 주로 많이 쓰는쪽에 ManytoMany Field를 추가한다.

과제: Movie & Actor

Case 1. 중간 테이블 이용

중간 테이블 객체를 가져옴.

actors = Actor.objects.all()
for actor in actors:
    actors_movies = ActorMovie.objects.filter(actor_id = actor.id)
    movie_list = []
    for actor_movie in actors_movies:
        movie_list.append({
            'id' : actor_movie.movie.id,
            'title' : actor_movie.movie.title,
        })
        # ...

Case 2. Movie 테이블 이용

Movie > ActorMovie로 가서 조회

actors = Actor.objects.all()
for actor in actors:
    movies = Movie.objects.filter(actormovie__actor_id = actor.id)
    movie_list = []    
    for movie in movies:
        movie_list.append({
            'id' : movie.id,
            'title' : movie.title,
        })
        # ...

Case 3. ManyToMany Column 활용

actors = Actor.objects.all()
for actor in actors:
    movies = actor.movies.all()

    movie_list = []    
    for movie in movies:
        movie_list.append({
            'id' : movie.id,
            'title' : movie.title,
        })
        # ...

0개의 댓글