settings.py 설정 변경
DATABASES = {
'default': env.db('DJANGO_DATABASE_URL'),
'airflowdb': env.db('AIRFLOW_DATABASE_URL'),
}
DATABASE_ROUTERS = {
'feed.dbrouter.MultiDBRouter',
}
dbrouter.py 설정
app_label에 접근하여 기본적으로 db를 선택하게 된다.class Meta:
...
app_label = 'airflowdb'
db_table = 'recommend_keyword2link'
...
db_for_read, db_for_write, allow_relation, allow_migrationpostman setting(swagger 작동❌)

API 개요
<base>/api/v1/feed/masterpik/Django ORM join
select_related()와 prefetch_related()를 사용하면 보다 편리하게 이를 가능하게 해준다.
select_related(): 일대일 혹은 일대다 관계에서 사용된다. 쿼리가 한번만 호출되는 장점이 있다.prefetch_related(): 다대다 혹은 다대일 관계에서 사용된다. 테이블의 특성상 join의 대상이 되는 모델을 바로볼때 all()을 반드시 해주어야 한다.
Foreign key 만들기
<name>_id로 명명된다.<name>_id의 방식으로 작명을 하는 실수가 없도록 하자.PikViewSet → retrieve → Responseretrieve: read only, return single resouce(expect id)
lookup_url_kwarg = 'slug'
lookup_field = 'slug'
### get_object()
filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]}
obj = get_object_or_404(queryset, **filter_kwargs)
list: read only, return list resouces
categories를 list로
"categories": [
{
"id": 6321,
"title": "블록체인 관련 도서",
"editable": true,
"deletable": true,
"count": 2,
"position": -1
},
...
]
categries에 따른 link id를 가져오도록
~~NestedSimpleRouter: 가운데에 들어갈 라우터를 설정~~
list()으로 queryset을 만들어 놓지 말자add_link_filter를 넣어야 하는가?
Q는 무엇인가?
쿼리의 where 절에서 or문을 추가하기 위한 객체이다.
첫번쩨 선언 이후로 어떤 쿼리로 연결할지 명시를 해주어야 한다.
q = Q(no=1)
q.add(name='lee', Q.OR)