개발자

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

2023년 02월 22일조회 351

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

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

황민호님의 프로필 사진

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

profile picture

익명

작성자

2023년 02월 23일

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

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

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

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

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