인프런 커뮤니티 질문&답변

mnmndevlol님의 프로필 이미지

작성한 질문수

작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지

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

작성

·

172

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
질문자

감사합니다! 

0

Hyong Sok Park님의 프로필 이미지
Hyong Sok Park
지식공유자

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

일단 프로젝트 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 라는 변수에 저장

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

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

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