이 글에서는 prefetch_related랑 select_related의 차이를 다루지 않습니다. n+1 problem을 silk 분석 툴로 분석해 보는 것이 목표입니다. 먼저, 이런 상황을 생각해 봅시다. Post가 있습니다. 포스트 전체를 긁어오려고 합니다. 그런데, 잘 생각해 보면, 포스트 정보를 긁어오기 위해서, 작성자의 닉네임 등을 긁어올 겁니다. 그러면, Post에는 User 테이블을 참조하는 FK가 들어갈 겁니다. 대략 이런 구조입니다. post는 22k개가 있고, 유저는 3명이 있습니다. index 요청을 날려서, 이 구문들을 수행해 봅시다. 어떻게 될까요? 22k번 만큼의 쿼리가 날라가게 됩니다. N+1 problem이라고 많이 이야기를 하는데요. silk로 해당 request가 수행되었..
Django 검색 결과
안녕하세요. 이번 시간에는 startswith, istartswith, endswith, iendswith에 대해서 간단하게 알아보겠습니다. 먼저 Post에 있는 데이터는 이러합니다. 문자열이 무엇으로 시작하는지는 startswith 조건을 걸어서 구현할 수 있어요. 예를 들어서, post가 "hi"로 시작하는 것은 어떻게 뽑아내야 할까요? post__startswith="hi"라고 쓴 것을 주목하시면 됩니다. 이것은 "hi"로 시작하는 post를 뽑는 구문입니다. 결과를 보겠습니다. 정확하게, "hi"로 시작하는 포스트가 나왔습니다. 앞에 i를 붙여서 istartswith 조건을 달면, 대소문자 구분 없이 검사해 주는데요. 예를 들어, istartswith="Hi"는 "hi"도 "hI"도 매치가 됩니다..
안녕하세요. 이번 시간에는 django에서 string 조건 검사를 할 때 쓸 수 잇는 contains, icontains, exact, iexact에 대해 간단하게 알아봅시다. 제대로 이해하시려면 collation에 대한 지식도 필요하고, 이 문서를 볼 필요도 있긴 합니다만, 추후에 조금 딥하게 다뤄보도록 하겠습니다. 먼저, 데이터는 이렇게 3개가 있습니다. "hi my name is cho", "nice to mEet you", "nice to meet you" 이렇게 세 개의 포스트가 있습니다. 먼저, icontains는 대소문자 구분 없이 문자열에 "meet"가 들어가는 것을 뽑아줍니다. "m"이나 "M" 등은 아스키 범위 내에 들어가기 때문에, "mEet"가 걸리던, "meet"가 걸리던 mat..
장고에서, 조건을 만족하는 오브젝트가 있으면 해당 오브젝트를 리턴하고, 없으면 404 처리를 하고 싶습니다. 이 때 저는 보통 어떻게 했냐면, exist 하지 않으면 404 response를 날리고, 아니면, 오브젝트르 가져와서 리턴했습니다. 그런데, 이를 좀 더 간단하게 처리해 줄 수 있는 함수가 있는데요. get_object_or_404입니다. 먼저 post 모델은 위와 같습니다. 작성자인 user는 User를 참조하는 Foreign key를 들고 있습니다. 이 User는 장고에서 기본으로 제공되는 Auth의 User를 의미합니다. 다음에 post는 포스트 내용을 의미해요. 뭔가 네이밍이 이상한 것 같지만 넘어갑시다. Post 관련 admin View에서, 포스트를 쓴 유저 이름을 얻어오게 바꾸었습니..
django를 처음 접했을 때, 헷갈리던 것이 null=True 옵션과 blank=True 옵션이였습니다. 이 둘에 대해 간단하게 알아보겠습니다. 먼저, null=True 값을 주고 migration을 해 보겠습니다. myapp_post 테이블을 생성하는 쿼리를 봅시다. 그러면 post에 NULL이 붙어 있는 것을 볼 수 있는데요. 이는 널 값을 허용한다는 의미입니다. 저는 sqlite를 써서 쿼리가 요래 생성되었습니다. 그냥 아무런 값도 추가하지 않았더니 NULL이 들어간 것을 볼 수 있습니다. NULL 값을 추가한 다음에 장고 어드민에서 해당 포스트를 수정해 보겠습니다. 빈 값으로 냅뒀더니, This field is required 라고 뜹니다. 이는 null=True 옵션이 Form에서 빈 값을 허..
최근댓글