Django에서 .get()과 .filter()의 차이가 무엇인가요?

조회 166

profile picture

익명

2월 22일

안녕하세요, 장고로 개인 프로젝트를 하고 있는데 장고 ORM과 관련하여 궁금한 것이 있습니다. .get()과 .filter()의 차이인데요, 조건에 해당하는 오브젝트가 존재하지 않을 때 .filter()를 썼을 땐 빈 쿼리셋이 반환되는 반면, .get()을 썼을 땐 해당하는 오브젝트가 없다는 에러가 뜹니다. 똑같이 오브젝트가 없는 경우인데 왜 .get()을 썼을 때는 오브젝트가 존재하지 않는다는 에러가, .filter()를 썼을 때는 빈 쿼리셋이 반환되는 건가요?

구체적이고 정성스러운 질문에 Up 투표를 눌러주세요.

설명이 부족한 질문에 Down 투표를 눌러주세요. 커리어리가 질문자에게 수정을 요청할게요.

답변 1

황민호 (로빈)님의 프로필 사진

안녕하세요. .get() 은 조건과 일치하는 하나의 객체를 반환할 것을 예상하는 코드이며, 만약 조건에 맞는 결과가 없다면 에러를 냅니다. 반면에 .filter() 는 조건과 일치하는 여러개일 수도 있다라고 예상하는 코드로, 만약 조건에 맞는 결과가 없다면 하나도 일치 하는 게 없다는 결과가 나오는 것이죠. 예를 들어 구슬이 잔뜩 들어있는 자루에서 파란색 구슬을 찾는다고 할 때, get() 방식은 파란색 구슬을 찾을 때까지 하나씩 구슬을 꺼내는 것이고, filter() 방식은 모든 구슬을 꺼내서 모든 파란색 구슬을 찾는 과정입니다. 파란색 구슬이 하나도 없었다면, get() 은 모든 구슬을 꺼냈으나 결국 파란색 구슬이 없어서 파란색 구슬이 하나는 있을 꺼란 기대에 못 미쳐 에러가 난 것이고, filter() 는 모든 구슬을 꺼냈으나 파란색 구슬은 하나도 없더라 하고 알려주는 것이죠.

profile picture

익명

작성자

2월 23일

오 그런 차이군요.. 이해되었습니다! 쉽게 설명해주셔서 감사합니다 👍☺️☺️

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직 개발자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직 개발자들의 명쾌한 답변을 얻을 수 있어요.