개발하는 자몽

[Django / TIL] ORM 쿼리 메서드 filter(), get() 본문

Python/Django

[Django / TIL] ORM 쿼리 메서드 filter(), get()

jaamong 2024. 1. 29. 20:52

Model.objects.filter()

  • 지정된 조건에 해당하는 모든 객체를 포함하는 QuerySet 반환
  • 조건에 해당하는 객체가 없는 경우, 에러가 아닌 빈 QuerySet 반환
results = Model.objects.filter(condition) 
if not results: 
  # 쿼리셋이 비어있을 경우, 처리할 로직

 

Model.objects.filter().values()

  • QuerySet에 있는 각 객체의 특정 필드 값을 가져와 딕셔너리 리스트로 반환
  • 각 딕셔너리는 선택한 필드를 key로 사용
    • 이를 이용하여 쿼리 결과에서 특정 필드만 가져올 수 있음 
results = Model.objects.filter(condition).values('field_name')
for result in results:
    if 'field_name' not in result:
        # 필드 값이 없을 때 처리할 로직

 

Model.objects.filter().first()

  • 지정된 쿼리 조건에 해당하는 첫 번째 객체 반환 (모델 클래스의 단일 객체)
  • 조건에 해당하는 객체가 없을 경우, `None` 반환
result = Model.objects.filter(condition).first()
if result is None:
    # 처리할 로직

 

Model.objects.get()

  • 지정된 조건에 해당하는 하나의 객체 반환 (모델 클래스의 단일 객체)
  • 조건에 해당하는 객체가 없거나 두 개 이상의 객체가 있을 경우, 예외 발생
    • `Model.DoesNotExist`
    • `Model.MultipleObjectsReturned`
  • 따라서 `try-except`를 사용하여 예외 처리를 할 필요가 있음
try:
    result = Model.objects.get(condition)
except Model.DoesNotExist:
    # 해당 객체가 없을 때 처리할 로직
except Model.MultipleObjectsReturned:
    # 여러 개의 객체가 반환될 때 처리할 로직

 

 

 

Comments