Ответ 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)
Поддерживает ли ORM Django SQL-оператор IN
? Что-то вроде:
SELECT *
FROM user
WHERE id IN (1, 5, 34, 567, 229)
Как я могу использовать ORM Django для создания такого запроса?
Спасибо.
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)
как указывает Yuji выше < field_name > __ in = [< list_of_values > ], переводится в следующий SQL:
WHERE < field_name > IN (< list_of_values > )
вы можете найти полное описание операторов django SQL WHERE в разделе Поиск в поле в следующем документе API Django.
Кроме того, Django ORM также поддерживает подзапрос:
Например:
from django.db.models import Subquery
users = User.objects.all()
UserParent.objects.filter(user_id__in=Subquery(users.values('id')))