1차 프로젝트: 중간 정리 (3)

signet·2021년 2월 24일
0

프로젝트 진행하면서 사용했던 코드 중 사소하지만 중요한 차이를 불러왔던 부분들이 있었다. 이번 포스트에서는 그것들을 정리해보고자 한다.

1. .exists()에서 () 여부의 차이

.exists()는 조건문 등에서 django ORM 명령문 마지막에 붙어 존재하는지 그렇지 않은지 여부를 판단하여 존재하면 딸려있는 코드를 실행하고 그렇지 않으면 넘어가도록 만들어준다. 이때, ()여부는 빈 쿼리셋을 참으로 판단하는지 거짓으로 판단하는지의 차이가 생긴다. 원칙적으로는 빈 쿼리셋이 조건에 들어가게 되면, 거짓으로 판단하고 딸려있는 코드를 실행하지 않아야 한다. 하지만 ()를 붙여주지 않으면, 빈 쿼리셋이 들어올 경우에도 참으로 판단하기 때문에 실행해선 안되는 코드를 실행하게 된다.

2. __contains

django 명령문 중 filter를 실행하는 경우, filter(컬럼=조건)의 방식으로 실행한다. 이때, (컬럼__contains=조건)을 실행하면, 컬럼내의 데이터 가운데 조건을 포함하고 있는 데이터를 가진 객체만을 쿼리셋에 담아 반환한다. 이 경우, 조건에 빈 문자열을 의미하는 ''을 넣어주면, filter()와 같아져 모든 객체를 반환한다. 이 차이는 query parameter를 받을 때 의미가 있을 수 있다.

1개의 댓글

comment-user-thumbnail
2021년 2월 27일

현수님.. 현수님 블로그는 처음 방문하네요~! 앞으로 종종 찾아오겠습니다 :) 프로젝트 정말 고생 많으셨어요! 팀쿱 화이팅!!

답글 달기