从模型查询获取字典

2 投票
3 回答
541 浏览
提问于 2025-04-17 11:03

在使用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 }

除了更清晰和简洁之外,这样做还避免了创建一个中间的列表或生成器对象。

撰写回答