Джанго выбирает объекты in_bulk () - PullRequest
1 голос
/ 06 мая 2011

Я пытаюсь использовать метод in_bulk, хотя что-то идет не так

Сначала я выбираю значения в список, который мне нужно выбрать оптом:

states = StateObjectRelation.objects.filter(state=int(3), content_type=int(ctype.id))

Затем преобразую их в список:

list = values_list('content_id', flat=True)

Теперь выбираем элементы in_bulk:

projects = Project.objects.in_bulk(list)

Дайте мне следующую ошибку:

Значение исключения:
in_bulk () должно быть снабженосписок идентификаторов.

Если я распечатаю значения в списке, я получаю следующее:

>>> print list
[1L]
>>> print list.values()
[{'state_id': 3L, 'content_id': 1L, 'id': 1L, 'content_type_id': 29L}]

Ответы [ 3 ]

3 голосов
/ 06 мая 2011

Во-первых, ошибочно называть ваш список list, поскольку это зарезервированное слово (функция) в Python. Но что касается вашего вопроса, все, что вам нужно сделать, это сначала составить список вашего запроса, например:

list2 = list(l)

или как это (медленнее):

list2 = [l for l in list]

Тогда у вас действительно есть настоящий list объект, а не просто что-то похожее на то, что вы печатаете. Теперь вы сможете звонить

projects = Project.objects.in_bulk(list2)

2 голосов
/ 13 декабря 2012

Я бы просто сделал это, используя list():

ids = list(your_queryset.values_list('content_id', flat=True))
projects = Project.objects.in_bulk(ids)
0 голосов
/ 15 сентября 2016

Я знаю, что на этот вопрос ответили, но эти ответы кажутся неэффективными. Вывод плоской values_list() вполне приемлем в качестве списка значений для in_bulk()

content_id_pks = StateObjectRelation.objects.filter(state=int(3), content_type=int(ctype.id)).values_list('content_id', flat=True)
projects = Project.objects.in_bulk(content_id_pks)

Обратите внимание, что проекты - это не набор запросов, это словарь, в котором представлен собственный набор проблем обработки с точки зрения эффективности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...