从模型查询获取字典
在使用Django模型查询时,有没有办法直接得到字典,而不是对象列表呢?
举个例子:
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}
3 个回答
-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)
3
使用字典推导式(http://docs.python.org/reference/expressions.html#grammar-token-dict_comprehension - 在Python 2.7.2及更早版本中可用):
{ obj.pk:obj for obj in objs }
除了更清晰和简洁之外,这样做还避免了创建一个中间的列表或生成器对象。