2012-01-25 4 views
2

Возможно ли получить словарь во время запроса на Django Model вместо списка объектов? Например:Получение словаря из запроса модели

ids = [1, 2, 3, 4, 5] 
objs = someModel.objects.filter(pk__in = ids) 

Он возвращает мне список объектов. То, что я хочу, так или иначе, если я могу, я хочу, чтобы словарь объектов с первичным ключом был ключевым.

objs = {1: query_object, 2: quer_object, 3: quer_object, 4: quer_object, 5: quer_object} 

ответ

4

Используйте ДИКТ понимание (http://docs.python.org/reference/expressions.html#grammar-token-dict_comprehension - доступен в питона 2.7.2 и, возможно, раньше):

{ obj.pk:obj for obj in objs } 

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

-1
objs = dict([(obj.pk, obj) for obj in objs]) 
+0

Не помню, с верхней части моей головы, как получить первичный ключ от объекта, поэтому ' obj.pk' часть может быть немного неправильной. Пожалуйста, исправьте, если да. – Peter

+0

спасибо за ответ, я думал, если нет встроенного метода в django, чтобы сделать то же самое ?? –

+0

Я так не думаю, какое использование оно служит в общем смысле? Это не так, как трудно сделать сам :) – Peter

-1

Вы можете использовать список понимание, чтобы создать это вручную:

dict([(obj.pk, obj) for obj in objs]) 
1

Вы также можете попробовать поставить объект ValuesListQuerySet в методу «in_bulk», как это:

someModel_query = someModel.objects.values_list('pk', flat=True) 
someModel.objects.in_bulk(someModel_query) 
Смежные вопросы