이미 있는 Model의 데이터에 django ManyToMany 관계를 추가하는 방법

조회수 1905회

https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many/

장고 메뉴얼을 보다가 궁금한점을 질문 드립니다.

메뉴얼에서는 모델을 선언한뒤에 쉘에서 인스턴스를 만들고 관계 데이터를 저장하는데요.

이미 저장되어 있는 데이터의 경우 어떻게 관계형 데이터를 링크(?) 시킬 수 있는지요.

쉘에서 메뉴얼대로 따라해보고 있는데 계속 결과가 [] 로만 나오네요 ㅠㅠ

1 답변

  • models.py에서 models.ManyToManyField를 추가한 다음에 manytomakemigration과 migrate를 수행하셨나요? 그렇게 하고 나면 어드민에서 이와 같은 필드가 생겨서 배우에 영화를 추가할 수 있습니다.

    이미지

    그리고 Shell에서도 수행이 가능한데요. 아래와 같이 Shell명령어를 통해 작업이 가능합니다.

    (1)영화 저장하기

    >>> from movielibrary.models import Movie
    >>> from movielibrary.models import Actress
    >>> notting_hill = Movie.objects.filter(title='Notting hill')
    >>> notting_hill
    [<Movie: Notting hill>]
    >>> notting_hill[0]
    <Movie: Notting hill>
    >>> Julia = Actress.objects.filter(title='Julia Roberts')[0]
    >>> Julia
    <Actress: Julia Roberts>
    >>> Julia.movies.add(notting_hill[0])
    

    (2) 저장한 정보 불러오기(배우기준)

    >>> Julia.movies.all()
    [<Movie: Pretty woman>, <Movie: Notting hill>]
    

    (3) 저장한 정보 불러오기(영화 기준)

    >>> notting_hill[0].actress_set.all()
    [<Actress: Julia Roberts>]
    
    • 아!! 그렇군요. 저는 지금 데이터에 미리 저장되어 있는 상태에서 다대다 model 필드만 추가해서 migrate까지 해놓은 상태 입니다. 이제 말씀해주신 것처럼 추가를 해야 하는데 이미 저장되어 있는 데이터를 추가하려면, 1000명의 배우를 한번에, 어떤 문법을 써야 하는지요? 알 수 없는 사용자 2016.9.6 11:33
    • 이미 저장된 1000명의 배우에 하나의 영화를 저장하는건가요? for actress in Actress.objects.all(): 와 같이 반복문에서 배우가 출연한 영화를 저장할 수 있겠네요. 정토드 2016.9.7 16:52

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)