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으로 사용가능하다.
반응형