이 포스팅에서 사용한 데이터들은 이곳 또는 공식문서가 원 출처임을 밝혀 둔다.
한편 쿼리셋 메소드는 종류가 많고 그 기능도 여러가지이므로 여기서 다 다루기는 어렵다. 이 포스팅에서는 기본적인 메소드 위주로 언급하고, 언급되지 않은 메소드에 대해서는 공식문서를 확인하면 더 자세히 알 수 있다.
쿼리로 가져올 쿼리셋 중 가장 첫 번째 객체를 리턴한다. 여기서 첫 번째는 순서를 지정해주지 않는 이상 기본적으로 PK의 순서상 첫 번째가 된다.
보통 참조/역참조로 다른 테이블의 객체를 필터링 해서 불러올 때 객체가 하나만 있을 경우 [0]을 써서 첫 번째 객체를 가져올 수도 있지만, first()를 사용하는 것이 깔끔하므로 자주 사용된다.
내가 설정한 조건의 쿼리셋이 존재하는지를 boolean으로 돌려준다. 물론 쿼리셋을 불러와서 if Post.objects.get(id=1):
와 같이 할 수도 있지만, 이렇게 하면 반드시 한 번은 데이터베이스를 히트해야 하고, 이는 자원낭비로 이어진다. 따라서 쿼리셋이 있는지를 확인하고자 한다면 exists()를 사용하는 것이 좋다.
SQL의 UPDATE FROM과 같은 역할을 한다. update에 인자로 주는 필드와 일치하는 필드의 값을 바꿔주고 그 개수를 리턴한다. 한 번에 바꿀 수 있는 필드의 개수는 제한이 없다.
내용을 바꿀 필드는 반드시 필드의 메인 테이블이어야 한다. 그래서 아래와 같이 참조하는 테이블의 필드 값은 바꿀 수 없다.
Entry.objects.update(blog__name='foo') # Won't work!
다만 참조하는 테이블을 필터링한 필드는 update가 가능하다.
Entry.objects.filter(blog__id=1).update(comments_on=True)