TIL 11. Django_Query Set model method(filter()와 get()의 차이)

4399 단어 djangoTILTIL

Today's topic

👉 자주 사용되는 Query Set model method의 종류 및 특징

1️⃣ QuerySet이 반환되는 경우의 주요 method(이전 편 참조)
2️⃣ QuerySet이 반환되지 않는 경우의 주요 method(이전 편 참조)
3️⃣ filter()와 get()의 차이점

3️⃣ QuerySet이 반환되는 경우의 주요 method

👉 QuerySet method를 다루면서 instance내에 있는 해당하는 정보를 얻고 싶어 filter()와 get() method를 통해 불러 보려 시도하였다. 하지만 get() method로는 get().(key)를 통해 불러 올 수 있었으나, filter() method로는 filter().(key)를 통해 시도하였으나, error가 나며 불러오지 못했다. filter로는 불러올 수 있는 방법이 없는 지 알아보면서 해당 내용을 정리하게 되었다.

  • filter()
    filter() method는 QuerySet 형태로 반환이 된다. filter는 해당하는 정보들을 sorting하여 걸러내는 역할이기에 QuerySet의 리스트 형태로 나오게 된다. 따라서 해당 filter() 뒤에 key로 붙여서 요청을 하였을 시에는 값이 나오지 않는 것을 확인하였다.
    In : Product.objects.filter(id=1)
    Out : <QuerySet [<Product: Product object (1)>]>
    >> Product.objects.filter(id=1).korean_name
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
    그러면 어떻게 하면 원하는 정보인 korean_name을 불러 올 수 있을까?
    정답은 for문을 사용하여 가져올 수 있다.
    In : for product in Product.objects.filter(id=1):
      	  print(product.korean_name)
    Out : 나이트로 바닐라 크림
  • get()
    get() method는 위와 같이 for문을 사용하지 않고도 korean_name을 뒤에 붙여주기만 함으로써 불러올 수 있다. ' ' 형태로 반환 결과가 나온다.
    In : Product.objects.get(id=1).korean_name
    Out : '나이트로 바닐라 크림'  
    이렇게 간단하게 결과 값을 얻을 수 있다.

My opinion

filter()나 get() 원하는 sorting을 할 수 있으나, filter는 범위를 선택하는 것으로 확인이 되고 get()은 원하는 하나를 선택해서 사용하는 것으로 확인이 된다. 어느 key에 해당하는 Query들을 sorting하고 싶은 경우는 filter()를 쓰고, 딱 명확한 값을 구하고 싶을 때면 get()을 사용하면 되겠다.

좋은 웹페이지 즐겨찾기