
기존에는 아래와 같은 방식으로 모델을 작성하였다.
순서대로 모델 안에 filter 를 접근하고 그 안에 특정 조건(pk, user 값 넘겨주기)을 넣는 방식이였는데

pk, user 값을 넘겨주는데 이것들은 AND function 이다.
pk 가 어떤 값이고, user 가 어떤 값이고 해서 이 두개의 조건을 모두 만족시키는 AND function 인 것.

그렇다면 OR function 은 어떻게 구현하고

WHERE function 은 어떻게 구현해야 하는 것일까


우리가 항상 작성했던 형식은 다음과 같이 특정 게시글의 model 에 접근하여 pk, user 를 넣는 형식

위를 아래와 같은 형식으로 바꿀 것이다.
뒤에 두개를 초점을 맞춰 봐야함
언더바 두개는 장고에서 말하는 Field Lookups 라고 부른다.



그렇다면 이게 어떤 식으로 DB 에서 작동을 하느냐
SQL 에서는 다음과 같이 작동을 한다.

위가 이런식으로 매칭이 된다.

복잡한 DB 쿼리를 사용자가 구현할 수 있도록 해주기 위해
우리의 코드에서는 IN 을 사용할 것이지만 장고에서는 다음과 같은 여러 Field Lookups 을 제공한다.

# subscribeapp/views.py
...
@method_decorator(login_required, 'get') # 로그인 하였는지
class SubscriptionListView(ListView):
model = Article
context_object_name = 'article_list'
template_name = 'subscribeapp/list.html'
paginate_by = 5
def get_queryset(self): # 가지고 오는 게시글들의 조건을 바꿀 수 있는 함수
projects = Subscription.objects.filter(user=self.request.user).values_list("project") #values_list : 값들을 리스트화 시킨다는 의미.
article_list = Article.objects.filter(project__in=projects) # 바로 위에서 find 한 projects
return article_list
뷰에서 article_list 를 되돌려 주었으니까 html 에서 이 별명을 사용하기 위해 템플릿 작성하기
pinterest 레이아웃을 이전에 조각화 시켜놓았던것을 가져다가 쓰고, view 에서 넘겨받은 article_list 를 이 안에서 사용하는 article_list 로 대입시키기.
<!--/subscribeapp/templates/subscribeapp/list.html-->
{% extends 'base.html' %}
{% block content %}
<div>
{% include 'snippets/list_fragment.html' with article_list=article_list %}
</div>
{% endblock %}
url 추가
from django.urls import path
from subscribeapp.views import SubscriptionView, SubscriptionListView
app_name = 'subscribeapp'
urlpatterns = [
path('subscribe/', SubscriptionView.as_view(), name='subscribe'),
# 추가
path('list/', SubscriptionListView.as_view(), name='list'),
]
구독이 되어 있는 상태

구독 취소 상태라면 게시글이 없다

즉, 구독한 대로 게시글이 나오는 것을 볼 수 있다.
따라서 다시 구독을 하고 http://127.0.0.1:8000/subscribe/list/ 로 접속하면 다음과 같이 구독한 게시판의 글이 모두 나오는 것을 확인할 수 있다.


<div class="pragmatic_header">
<div>
<h1 class="pragmatic_logo">Prgmatic</h1>
</div>
<div pragmatic_header_navbar>
<a href="{% url 'articleapp:list' %}" class="pragmatic_header_nav">
<span>Articles</span>
</a>
<a href="{% url 'projectapp:list' %}" class="pragmatic_header_nav">
<span>Projects</span>
</a>
<!-- 추가 -->
<a href="{% url 'subscribeapp:list' %}" class="pragmatic_header_nav">
<span>Subscription</span>
</a>
...
</div>
</div>

