안녕하세요 :) django를 공부하고 있는 비전공자 학생입니다. 아래의 디자인 처럼 학

 
서대원

안녕하세요 🙂
django를 공부하고 있는 비전공자 학생입니다.
아래의 디자인 처럼 학생과 과목간의 관계를 M:N 관계로 나타내고 싶어서 학생 테이블과 과목 테이블 사이에 intermediary 테이블을 구현해서 연결해주고 있습니다. 위 디자인을 django model로 구현하려고 하는데 아래의 코드와 같이 구현하면 되는것인가요? 수정해야할 부분이 있으면 지적해주실수 있을까요? 감사합니다.

  • Jeong Bin Park

    두 모델 중 하나에 ManyToManyField 를 한번만 쓰시면 되는데요. 그러면 subjects_stduents라는 이름의 테이블이 자동으로 만들어집니다. through는 ManyToMany로 만든 모델 (즉 두 모델을 연결해주는 테이블)에 추가로 데이터를 담고 싶을 때 주로 씁니다. 올리신 그림처럼 하시려면 through를 빼시거나, 아니면 SubjectsToStudents 모델을 한 개 더 정의하셔야 합니다. 자세한건 공식 문서를 읽어보세요 (https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many/https://docs.djangoproject.com/en/1.8/topics/db/models/#extra-fields-on-many-to-many-relationships).

    Jeong Bin Park

    아 그림 눌러보니 SubjectsToStudents 모델을 아래에다 정의 하셨군요.. 그럼 걍 이대로 하셔도 됩니다만.. 추가 데이터가 필요한게 아니면 through를 지우시고, 모델 정의도 제거하셔도 됩니다. 참고로 Django admin interface는 모델명 뒤에 복수형 s를 알아서 붙여주니 모델명은 단수로 정의하시는게 안 헷갈립니다..

    서대원

    Jeong Bin Park답변 감사합니다
    즉 두 테이블중 한곳에만 mtom필드를 만들어주면 위그림과같은 intermediate 테이블이 만들어지는것인가요?

    Jeong Bin Park

    넵. 위와 같이 한 경우 subjects_students아니면 students_subjects로 만들어집니다. 물론 이 테이블에 직접 접근할 필요는 없고요.. 공식 문서에 나온대로 하시면 됩니다.

    서대원

    박정빈 늦은시간에 감사합니다^^

Advertisements