фильтр django со списком значений

Я уверен, что это тривиальная операция, но я не могу выяснить, как это делается... Как создать запрос django для списка значений.

должно быть что-то умнее этого:

ids = [1, 3, 6, 7, 9]
for id in ids:
   MyModel.objects.filter( pk=id )

Я ищу, чтобы получить их всех в одном шоу с чем-то вроде:

ids = [1, 3, 6, 7, 9]
MyModel.objects.filter( pk=ids )

3 ответов


С документация Django:

Blog.objects.filter(pk__in=[1, 4, 7])

когда у вас есть список элементов, и вы хотите, чтобы проверить возможные значения из списка, то вы не можете использовать =.

SQL-запрос будет похож на SELECT * FROM mytable WHERE ids=[1, 3, 6, 7, 9] что неверно. Вы должны использовать in оператор для этого, поэтому запрос будет похож на SELECT * FROM mytable WHERE ids in (1, 3, 6, 7, 9) для этого Django обеспечивают __in оператора.


С документация Django:

Blog.objects.in_bulk([1])
{1: <Blog: Beatles Blog>}

Blog.objects.in_bulk([1, 2])
{1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>}

Blog.objects.in_bulk([])
{}

Blog.objects.in_bulk()
{1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>, 3: <Blog: Django Weblog>}

Blog.objects.in_bulk(['beatles_blog'], field_name='slug')
{'beatles_blog': <Blog: Beatles Blog>}