코딩 연습/Django
게시글 테이블에서 댓글 테이블로 접근(역으로 접근하기)
쵸잇
2018. 11. 22. 13:08
Article |
||||
id | title | content | category | hashtag(ManyToMany(Hashtag__name)) |
1 | 자바 | 안드로이드 따라하기 시작 | dv | java, android |
2 | 파이썬 | 장고 배달의 민족 클론하기 | dv | python, django |
(Aritlce 테이블)
단독 게시글 페이지(상세페이지)에서 댓글 리스트를 출력하고 싶은데,
댓글 테이블에서는 게시글이 다대일 관계로 접근이 가능한데, 역으로는 접근가능한 방법이 없다.
이를 해결하는 방법
Comment |
|||
id | article(ForeignKey(Article)) | name |
content |
1 | 1 | Ryan |
좋은 시작이야 |
2 | 2 | Adrianne | I'm so relieved that you've come to your senses |
3 | 2 | Jack | 나는 어렵더라 |
4 | 1 | Paul | Good job man~ |
Ariticle 테이블과 Comment 테이블은 다대일 관계를 맺고 있다.
테이블을 살펴보면, Comment 테이블에서 Article 테이블로 접근이 가능하다.
그러므로 Article 테이블의 데이터를 유용하게 옮겨 쓸 수 있다.
그런데, 반대로 Article 테이블에서 Comment 테이블의 데이터를 가져오려해도 접근 방법이 보이지 않는다.
이를 위해 Comment 테이블의 article 필드에서 "related_name" 치트를 사용하여 Article 테이블에서의 접근을 허용한다.
1 2 3 4 5 6 7 8 | class Comment(models.Model): article = models.ForeignKey( Article, related_name="article_comments", on_delete=models.CASCADE ) name = models.CharField(max_length=50) content = models.CharField(max_length=200) | cs |
1 2 3 4 5 6 7 | def detail(request, article_id): article = Article.objects.get(id=article_id) comment_list = article.article_comments.all(article__id=article_id) ctx = { "article" : article, "comment_list" : comment_list, } | cs |
*ORM 사용시 Article 테이블에서 id 필드로 접근하려면 __ (더블언더바)를 반드시 사용해야한다.