11. Как найти вторую по величине запись с помощью Django ORM?¶
Вы можете столкнуться с ситуацией, когда вам нужно найти второго пользователя по возрасту или зарплате.
Хотя ORM дает возможность найти first()
, last()
элемент из кверисета, но не n-й элемент. Это можно сделать с помощью оператора slice.
Мы можем найти N-е количество записей из запроса с помощью оператора slice.
>>> user = User.objects.order_by('-last_login')[1] // Second Highest record w.r.t 'last_login'
>>> user.first_name
'Raghu'
>>> user = User.objects.order_by('-last_login')[2] // Third Highest record w.r.t 'last_login'
>>> user.first_name
'Sohan'
User.objects.order_by('-last_login')[2]
извлекает нужный объект из базы данных только с помощью LIMIT ... OFFSET
. Если вы посмотрите на сгенерированный sql, вы увидите что-то вроде этого.
SELECT "auth_user"."id",
"auth_user"."password",
"auth_user"."last_login",
"auth_user"."is_superuser",
"auth_user"."username",
"auth_user"."first_name",
"auth_user"."last_name",
"auth_user"."email",
"auth_user"."is_staff",
"auth_user"."is_active",
"auth_user"."date_joined"
FROM "auth_user"
ORDER BY "auth_user"."last_login" DESC
LIMIT 1
OFFSET 2