Django: поддерживает ли ORM оператор SQL "IN"?

Поддерживает ли ORM Django SQL-оператор IN? Что-то вроде:

SELECT *
FROM user
WHERE id IN (1, 5, 34, 567, 229)

Как я могу использовать ORM Django для создания такого запроса?

Спасибо.

Ответы

Ответ 1

in

User.objects.filter(id__in=[1, 5, 34, 567, 229])

print _.query
SELECT <fields> FROM "auth_user" WHERE "auth_user"."id" IN (1, 5, 34, 567, 229)

Ответ 2

как указывает Yuji выше < field_name > __ in = [< list_of_values > ], переводится в следующий SQL:

WHERE < field_name > IN (< list_of_values > )

вы можете найти полное описание операторов django SQL WHERE в разделе Поиск в поле в следующем документе API Django.

https://docs.djangoproject.com/en/1.9/ref/models/querysets/

Ответ 3

Кроме того, Django ORM также поддерживает подзапрос:

Например:

from django.db.models import Subquery
users = User.objects.all()
UserParent.objects.filter(user_id__in=Subquery(users.values('id')))