지난 포스트(https://practice-a-lot.tistory.com/42)에서 "related_name" 치트를 활용하는 방법을 보았다.


그에 대한 연장선으로 view에서 comment_list를 만들어줄 필요 없이 템플릿 자체에서 구현하는 방법을 볼 것이다.

먼저 view에서 작성한 comment_list를 삭제한다 


1
2
3
4
5
6
def detail(request, article_id):
    article = Article.objects.get(id=article_id)
    ctx = {
        "article" : article
    }
    return render(request, "detail.html", ctx)
cs



comment_list를 삭제했지만 comment 데이터는 article 인스턴스에 고스란히 담겨있다.

지난 포스트에서 했던 것처럼 템플릿에서도 article 인스턴스에 접근하여 comment_list를 뽑아내면된다. 



1
2
3
4
5
<div>
   {% for comment in article.article_comments.all %}
   <div>{{ comment.username }} : {{ comment.content }}</div>
   {% endfor %}
</div>
cs



뷰에서 삭제한 comment_list의 값을 템플릿에서 그대로 사용했다. all 다음에 ()를 쓰지 않는다. 함수가 아니므로.


Comment 테이블의 article 필드에서 쓰인 "related_name" 치트가 ForeignKey로 연결된 Article 테이블에서 역으로 Comment 테이블에 접근하게 된다.  

블로그 이미지

쵸잇

,

결과보어

외국어/중국어 2018. 11. 22. 19:15

어떠한 동작의 결과를 보충 설명해주는 기능을 한다.


1. 成 

- 주어 + 동사 + 成 + 목적어 형태

- 주어+동사를 먼저 해석하고, 成+목적어를 이어서 ("~으로"라는 뜻으로) 해석 


都换成韩币。(Dōu huàn chéng hánbì) 모두 바꿨다 한국돈으로 ▶ 모두 한국돈으로 바꿨다

头发都变成红色了。(Tóufǎ dōu biàn chéng hóngsèle) 머리카락이 모두 변했다 빨간색으로 머리카락이 전부 빨간색으로 변했다


2.


1) "~까지"로 해석

成와 같은 방식으로 해석


您寄到哪里?(Nín jì dào nǎlǐ) 너 부치다 어디까지 ▶ 어디까지 부치시나요?

我们学到第六课了。(Wǒmen xué dào dì liù kèle)우리는 배웠다 6과까지 ▶ 우리는 6과까지 배웠다.


 2) "드디어 ~하다"로 해석


我已经收到你的邮件了。(Wǒ yǐjīng shōu dào nǐ de yóujiànle.) (직역하면 난해해져 찾아본 결과로 번역함) 나는 메일을 받았다

昨天我见到张京。어제 나는 드디어 장경을 만났다.

 

3. 

- "다 ~했다"로 해석


我看完了你的作文。나는 다 봤다 너의 글을 ▶ 나는 너의 글을 다 봤다

我写完作业了。나는 다 했다 숙제를 ▶ 나는 숙제를 다 했다.


4. 

- 잘못 ~했다


这个字写错了,你再写一下。이 글자를 잘못 썼어, 너 다시 한번 써.

你打错电话了。 당신 전화 잘못 걸었다.


5. 

- ~하고 없다


钱都花光了。돈을 모두 쓰고 없다.

衣服都卖光了。옷 전부 팔고 없다.


6. 

- 잘 ~하다


我吃好了晚饭。나는 잘 먹었다 저녁을 ▶ 나는 저녁을 잘 먹었다.

我爱人洗好了衣服。내 애인은 잘 세탁했다 옷을 ▶ 내 애인은 옷을 잘 세탁했다  


7. 

- ~을 이해하다


我的话你听懂了吗? 내 말 너는 듣고 이해했니?

你看懂这本书了吗?너는 이해했니 이 책을?


'외국어 > 중국어' 카테고리의 다른 글

조동사 会 파헤치기  (0) 2018.11.30
중국어의 Because (因为~, 所以~)  (0) 2018.11.23
조동사 可以  (0) 2018.11.20
정도보어(상태보어)와 得  (0) 2018.11.19
기초문법 (4) - 방위사  (0) 2018.10.20
블로그 이미지

쵸잇

,

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 필드로 접근하려면 __ (더블언더바)를 반드시 사용해야한다.

블로그 이미지

쵸잇

,