Django ORM에서 QuerySet과 Object는 각각 다른 역할과 특징을 가지고 있습니다.
QuerySet은 Django 모델의 데이터베이스 쿼리 인터페이스를 나타냅니다. QuerySet은 데이터베이스로부터 데이터를 읽고 필터를 적용하거나 정렬하는 등의 작업을 할 수 있습니다. 또한, QuerySet은 'lazy'합니다. 이는 실제로 데이터베이스에 쿼리를 실행하는 것이 필요한 시점까지 쿼리의 실행을 미룬다는 뜻입니다. 예를 들어, Post.objects.all()은 모든 Post 객체를 가져오는 QuerySet을 반환하지만, 이 때 데이터베이스에 쿼리가 실행되는 것이 아니라, 이 QuerySet을 반복하거나 실제로 데이터를 사용할 때 쿼리가 실행됩니다. 이러한 특성 덕분에 QuerySet은 체이닝을 지원하며, 필요한 만큼 여러 필터나 조건을 추가할 수 있습니다.
반면에, Object는 실제 Django 모델의 인스턴스를 나타냅니다. 각 Object는 데이터베이스 테이블의 한 행을 나타내며, 각 필드는 테이블의 열에 해당합니다. Object는 모델에 정의된 메소드를 사용할 수 있으며, 각각의 필드 값을 가지고 있습니다.
간단히 말해, QuerySet은 데이터베이스로부터 데이터를 가져오는 방법을 정의하고, Object는 그 결과로 가져온 실제 데이터를 나타냅니다.
예를 들어, Post.objects.filter(title__contains='Django')는 'Django'가 제목에 포함된 Post 객체들을 가져오는 QuerySet을 반환하고, 이 QuerySet에 대해 반복하면 실제 Post Object들을 얻을 수 있습니다.
댓글