class ActorsView(View): def get(self, request): actors = Actor.objects.all() results = [] for actors_data in actors: actor_id = MovieActor.objects.filter(actor=actors_data) results.append( { "이름" : actors_data.first_name, "성" : actors_data.last_name, "영화리스트" : [movie_id.movie.title for movie_id in actor_id] } ) return JsonResponse({'results':results}, status=200)
-> Foriegn Key만 존재하는 Junction table이 참조하고 있는 다른 PK table의 데이터를 가져와 변환하는 방법이 주요 포인트
-> Actor의 PK를 참조하고 있는 Movie의 FK를 찾기 위해, "영화리스트" 항목에 Actor_id 값 들을 가진 리스트로 for문을 사용하여 Movie_id 값을 추출 하는 방식
class MoviesView(View): def get(self,request): movies = Movie.objects.all() results = [] for movie_data in movies: results.append( { "영화제목" : movie_data.title, "개봉날짜" : movie_data.release_date, "러닝타임" : movie_data.running_time, "배우목록" : [actor_data.last_name for actor_data in movie_data.actors_set.all()] } ) return JsonResponse({"result":results}, status = 201)
-> Models.py 에서 ManyToManyField 를 추가할 때, 어디에 있는지는 중요하지 않지만, 두 모델중 한 곳에만 있어야함을 주의해야 함
Junction table 을 사용하면 MtoM Field 를 사용한 것보다 views에서의 데이터 추출이 조금 더 복잡해지는 것 같음
MtoM Field 를 사용하면 DB에 데이터를 입력할 때, 일부러 junction table 을 생성하고, 데이터를 입력할 수고가 줄어듦
하지만 이렇게 단순한 관계일 경우는 일반적인 MtoM field로 끝나지만, 만일 두 모델간의 관계에 추가적인 데이터를 연결해야 할 경우가 생겼을 시, junction table을 포함해 MtoM Field도 만들어야 함
-> 이와 관련된 질문과 멘토님의 답변 :
MtoM Field 와 junction table 동시 사용 시 "through" 속성 부여 필수
-> 관련된 질문과 멘토님의 답변 :