Today I Learned/django

장고 django ForeignKey (1:N 관계)

하나719 2023. 9. 26. 00:33
반응형

1:N 관계 예시

한명의 유저는 여러개의 포스트를 작성할 수 있다. -> 1:N 

하나의 포스트는 여러개의 댓글을 가질 수 있다. -> 1:N

 

이렇게 하나의 객체가 여러개의 객체를 가질 수 있을때  1:N 관계라고 하고 ForeignKey로 관계를 정의 할 수 있다. 

 

정의 방법

N에 해당하는 객체에 ForeignKey 로 지정해준다.

Post, Comment 예시로 들면 아래처럼 작성할 수 있다.

class Post(models.Model):
	...
    
class Comment(models.Model):
	post = models.ForeignKey(Post, on_delete= models.CASCADE)

 

Queryset 작성 방법

1. N 객체에서 관계된 객체의 값 조회하기

 

comment = Comment.objects.first()

comment.post

2. 반대로 특정 Post에 작성된 Comment를 뽑고 싶을 때!

post에는 comment 컬럼이 없기때문에 1번 방법처럼 뽑을 수 없음

예시) id = 1인 포스트에 달린 댓글을 뽑고 싶을때

1) Post에서 객체 뽑아서, comment의 필터값으로 전달 

post = Post.objects.get(id=1) 

Comment.objects.filter(post= post)

2) FK의 reverse_name 사용: 모델명소문자_set

comment_set으로 조회 > 1번보다 더욱 간편한 방법!

(+) foreignkey 생성시 related_name 설정해주면 해당 이름을 reverse_name으로 사용가능하다.

 

반응형