이름이 R로 시작하는 모든 사용자의 이름(
first_name
)과 성(last_name
)을 구해보자
SELECT "auth_user"."first_name", "auth_user"."last_name"
FROM "auth_user"
WHERE "auth_user"."first_name"::text LIKE R%
queryset = User.objects.filter(
first_name__startswith='R'
).values('first_name', 'last_name')
# <QuerySet [{'first_name': 'Ricky', 'last_name': 'Dayal'}, {'first_name': 'Ritesh', 'last_name': 'Deshmukh'}, {'first_name': 'Radha', 'last_name': 'George'}, {'first_name': 'Raghu', 'last_name': 'Khan'}, {'first_name': 'Rishabh', 'last_name': 'Deol'}]
queryset = User.objects.filter(
first_name__startswith='R'
).values_list('first_name', 'last_name')
# <QuerySet [('Ricky', 'Dayal'), ('Ritesh', 'Deshmukh'), ('Radha', 'George'), ('Raghu', 'Khan'), ('Rishabh', 'Deol')
SELECT "auth_user"."first_name", "auth_user"."last_name"
FROM "auth_user"
WHERE "auth_user"."first_name"::text LIKE R%
queryset = User.objects.filter(
first_name__startswith='R'
).only("first_name", "last_name")
SELECT "auth_user"."id", "auth_user"."first_name", "auth_user"."last_name"
FROM "auth_user" WHERE "auth_user"."first_name"::text LIKE R%
queryset = User.objects.filter(
first_name__startswith='R'
).defer("first_name", "last_name")
order_by()
가 여러번 사용되었다면, 맨 마지막꺼만 유효함?
를 지정하면 됨Entry.objects.order_by('?')
__
)를 사용# 순서가 지정되지 않은 경우
Entry.objects.order_by('blog')
# 위 코드는 아래와 같아
Entry.objects.order_by('blog__id')
# name 순으로 정렬할 경우
Entry.objects.order_by('blog__name')
# asc()나 desc()를 사용해 순서를 지정할 수 있다.
Entry.objects.order_by(Coalesce('summary', 'headline').desc())
# asc(), desc()는 null 값이 정렬되는 방법을 제어하는 인수(nulls_first, nulls_last)를 가지고 있다.