조회 166
익명
2월 22일
안녕하세요, 장고로 개인 프로젝트를 하고 있는데 장고 ORM과 관련하여 궁금한 것이 있습니다. .get()과 .filter()의 차이인데요, 조건에 해당하는 오브젝트가 존재하지 않을 때 .filter()를 썼을 땐 빈 쿼리셋이 반환되는 반면, .get()을 썼을 땐 해당하는 오브젝트가 없다는 에러가 뜹니다. 똑같이 오브젝트가 없는 경우인데 왜 .get()을 썼을 때는 오브젝트가 존재하지 않는다는 에러가, .filter()를 썼을 때는 빈 쿼리셋이 반환되는 건가요?
구체적이고 정성스러운 질문에 ↑Up 투표를 눌러주세요.
설명이 부족한 질문에 ↓Down 투표를 눌러주세요. 커리어리가 질문자에게 수정을 요청할게요.
답변 1
안녕하세요. .get() 은 조건과 일치하는 하나의 객체를 반환할 것을 예상하는 코드이며, 만약 조건에 맞는 결과가 없다면 에러를 냅니다. 반면에 .filter() 는 조건과 일치하는 여러개일 수도 있다라고 예상하는 코드로, 만약 조건에 맞는 결과가 없다면 하나도 일치 하는 게 없다는 결과가 나오는 것이죠. 예를 들어 구슬이 잔뜩 들어있는 자루에서 파란색 구슬을 찾는다고 할 때, get() 방식은 파란색 구슬을 찾을 때까지 하나씩 구슬을 꺼내는 것이고, filter() 방식은 모든 구슬을 꺼내서 모든 파란색 구슬을 찾는 과정입니다. 파란색 구슬이 하나도 없었다면, get() 은 모든 구슬을 꺼냈으나 결국 파란색 구슬이 없어서 파란색 구슬이 하나는 있을 꺼란 기대에 못 미쳐 에러가 난 것이고, filter() 는 모든 구슬을 꺼냈으나 파란색 구슬은 하나도 없더라 하고 알려주는 것이죠.
익명
작성자
2월 23일
오 그런 차이군요.. 이해되었습니다! 쉽게 설명해주셔서 감사합니다 👍☺️☺️
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직 개발자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직 개발자들의 명쾌한 답변을 얻을 수 있어요.