웹 프로그래밍/[ Django ]

[ Django ] 06. Django relation 1:N 복습

kim.svadoz 2020. 8. 11. 09:58
728x90
반응형

1:N 관계 복습

유저 생성 ORM

User.objects.create(username='test', password='test')

게시글 생성 ORM

$ python manage.py shell_plus
user1 = User.objects.get(pk=2)
In[] user1
Out[] <User:ksh>
Article.objects.create(title='aaaa', content='bbbbb', user=user1)
Article.objects.create(title='aaaa', content='bbbbb', user_id=user1.pk)

댓글 생성 ORM

comment = Comment.objects.get()

comment.article.pk
4

comment.article.title
title

article = Article.objects.get(pk=4)


# article과 user의 입장에서 댓글과 게시글이 있는지 없는지 모르기때문에 set.all()로 가져온다.
article.comment_set.all()
user1.article_set.all()

# 반복문으로도 사용가능
for article in user1.article_set.all():
    print(article.title)


article1 = Article.objects.get(pk=?)
Comment.objects.create(content='content', user=user1, article=article1)
  • 1:N 관계에서 N의 입장은 항상 참조하는 관계가 존재하고 1을 보장할 수 있기 때문에 바로바로 접근가능
    • 1의 입장에서는 접근하는 방법이 달라진다
      • _set.all() !!

특정 게시글이 가지고 있는 전체 댓글 불러오기

article = Article.objects.get(pk=?)
article.comment_set.all()
= Article.objects.get(pk=?).comment_set.all()

특정 댓글이 어느 게시글과 연결되어 있는지 확인하기

comment = Comment.objects.get(pk=?)
comment.article.title

특정 게시글이 어느 유저와 연결되어 있는지 확인하기

article = Article.objects.get(pk=?)
article.user.username

특정 유저가 작성한 전체 게시글 가져오기

user1 = User.objects.get(pk=?)
user1.article_set.all()

특정 유저가 작성한 전체 댓글 가져오기

user1 = User.objects.get(pk=?)
user1.comment_set.all()
728x90
반응형