TIL#59 Django ForeignKey

Dasom·2020년 9월 9일
0

Django

목록 보기
7/34

ForeignKey

모델 테이블간의 관계에 대해서 배웠다. 1:1(일대일), 1:n(일대다), n:n(다대다) 의 관계에 대해서 배웠고, primary key(pk) 와 foreign key(fk) 에 대해서도 배웠다.
foreign key 는 models.py에서 table을 정의할 때, 다른 table의 pk를 가져오는 것이다.

위의 그림에서 본다면 Starbucks 가 메인 class가 되고 Starbucks의 인스턴스 coffee_type의 foreignkey는 CoffeeType 클래스의 id 가 된다. 또 Starbucks의 인스턴스 size의 foreignkey는 Size클래스의 id가 된다.

이렇게 배운 것을 토대로, 지난번에 만들었던 회원가입, 로그인 엔드포인트 프로젝트 폴더에서 포스팅 앱을 하나 더 생성해 게시물 만드는 것이 과제로 주어졌다.

일단은 위를 보면 만약 Users 클래스가 같은 models.py 안에 있다면 ForeignKey(Users, on_delete=models.CASCADE)라고 하면 된다. 하지만 해당 프로젝트에서는 Users 클래스가 다른 앱에 있었기 때문에 위와 같이 ''로 묶어주면서 앱의 이름까지 같이 넣었다. 뒤의 on_delete=models.CASCADE 는 ForeignKey가 바라보는 값이 삭제될 때 ForeignKey를 포함하는 모델 인스턴스도 삭제된다. 따라서 위와 같은 경우에서는 ForeignKey가 바라보는 user가 삭제되면 Posting 클래스에 있는 user도 삭제된다는 의미이다.

ForeignKey on_delete 종류 참고 링크

이미지URL

그 다음 단계로 이미지를 게시할 수 있도록 인스턴스를 생성하였다.

이미지 같은 경우에는 한 user가 여러장의 이미지를 게시할 수 있기 때문에 일대다를 생각하여 따로 클래스를 생성하였고 Images 클래스가 Posting 클래스를 바라본다고 생각하여 Images 클래스 안에 posting 인스턴스를 생성하여 ForeignKey 를 할당하였다.

❗️ 위치상으로 먼저 선언된 클래스에서 나중에 선언된 클래스를 외래키로 할당하게 된다면 ForeignKey('Posting') 과 같이 따옴표를 써야 한다. 반대로 나중에 선언된 클래스에서 먼저 선언된 클래스를 외래키로 받아오게 된다면 ForeignKey(Posting) 라고 하면 된다. 위에서는 Images 클래스가 위치상으로 아래에 있기 때문에 따옴표를 쓰지 않았다.

profile
개발자꿈나무🌲

0개의 댓글