• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

41강에서 필터링 부분 문의 드립니다

21.05.14 17:47 작성 조회수 108

0

41강 6분 13초에 하신 말씀이신데요.

현재의 프로젝트의 오브젝트같은프로젝트를 가진 아티클을 object_list 에 담았다.

object_list = Article.objects.filter(project=self.get_object())

느낌적으로는 알겠는데 한국말로 번역이 잘 안돼서요 ..

이 바로 다음에 detail.html에서

article_lis에서 아무 게시물이나 전체 다 뽑아내면 안되니까 with태그를 사용해서 필터링이 되어있는 object_list를 담아서 쓴다는건 알겠는데요 (틀리면어쩌지)

그리고 다시 저 색칠해둔거 보면 또 혼란이 와서요.

어떻게 필터링이 된건지를 모르겠어요.

어떤부분이 필터링이 된 부분인지.. 어떻게 해서 프로젝트 디테일부분을 보면 해당 프로젝트 사진들만 싹 나오는건지

느낌만 있고 어디부분인지 명확히 잘 모르겠어서 한번 질문드려봅니다.. 

 

답변 2

·

답변을 작성해보세요.

0

mnmndevlol님의 프로필

mnmndevlol

질문자

2021.05.22

감사합니다! 

0

안녕하세요!
질문 확인했습니다.

일단 프로젝트 detail 페이지에서 해당 프로젝트에 해당하는,
그러니까 해당 게시판에 해당되는 게시글만 필터링해서 보여주는 것이 목적이라는 점을 염두에 두시고
답변을 참고해주시면 감사하겠습니다.

object_list = Article.objects.filter(project=self.get_object())

구문을 하나하나 해석해보도록 하겠습니다.

Article.objects.filter(project=self.get_object())

먼저 봐야할 것은 Article.objects.filter 구문,
그러니까 Article 객체들을 필터링 하는 과정입니다.
모든 데이터베이스에 저장되어있는 Article 객체들 중에서 
어떤 조건에 맞는 객체들만 걸러내주는거죠.

Article.objects.filter(project=self.get_object())

그 다음으로 봐야할 것은 조건문입니다.

이 부분을 해석하자면 project 라는 값이 self.get_object() 와 같은 값인 조건을 명시하고 있습니다.
이 project의 경우에는, 저희가 처음에 만들었던 Article 모델을 다시 보게 되면,


class Article(models.Model):
writer = models.ForeignKey(User, on_delete=models.SET_NULL, related_name='article', null=True)
project = models.ForeignKey(Project, on_delete=models.SET_NULL, related_name='article', null=True)

title = models.CharField(max_length=200, null=True)
...

이런식으로 Article객체에는 project 라는 이름의 ForeignKey 가 존재하는 것을 볼 수 있죠.
간단하게 말하면 Project 객체와의 연결고리가 있다는거죠.

그리고 self.get_object() 의 경우에는
지금 현재 요청에 포함된 pk 값을 가지는 프로젝트 객체가 될것이구요.
 

object_list = Article.objects.filter(project=self.get_object())

결국 위의 모든 구문이 의미하는 것은 

1. Article 모든 객체들 중에서
2. Article 속성 중 project가
3. 지금 유저가 요청 하는 project 객체와 같은
4. 모든 Article 객체를 object_list 라는 변수에 저장

하는 과정이라고 보시면 됩니다.

결국 게시판의 글들만 필터링하는거죠.

답변이 도움이 되셨을지 모르겠네요.
좋은하루 보내시길 바랍니다!