Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django selecting objects in_bulk()

Tags:

django

I am trying to use in_bulk method, although something goes wrong

First I pick values into list that I need to select in bulk:

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

Then convert them to list:

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

Now selecting the items in_bulk:

projects = Project.objects.in_bulk(list)

Give me the following error:

Exception Value:
in_bulk() must be provided with a list of IDs.

If i print out the values that are in list I get the following:

>>> print list
[1L]
>>> print list.values()
[{'state_id': 3L, 'content_id': 1L, 'id': 1L, 'content_type_id': 29L}]
like image 341
Ruslan Avatar asked May 06 '11 09:05

Ruslan


2 Answers

Firstly, it's a mistake to call your list list, since that's a reserved word (function) in Python. But as for your question, all you need to do is make a list of your query first, like this:

list2 = list(l)

or like this (slower):

list2 = [l for l in list]

Then you really have a real list object, and not just something that appears like one when you print it. Now you should be able to call

projects = Project.objects.in_bulk(list2)

like image 125
Herman Schaaf Avatar answered Oct 31 '22 00:10

Herman Schaaf


I would simply do it like that, using list():

ids = list(your_queryset.values_list('content_id', flat=True))
projects = Project.objects.in_bulk(ids)
like image 41
Geekfish Avatar answered Oct 31 '22 01:10

Geekfish