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_migration
postman 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
→ Response
retrieve: 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)