Python Django:如何从querydict获取具有相关对象作为键的字典

Python Django:如何从querydict获取具有相关对象作为键的字典,python,django,Python,Django,假设我们有以下模型:(简化) 有两个集合“x”和“y” 一个页面可以选择一些小册子,而不是全部 有没有办法得到这样一本小册子词典: {'x': [brochure1, brochure2], 'y': [brochure3, brochure4]} [{'collection': 'x', 'brochures': [brochure1, brochure2]}, {'collection': 'y', 'brochures': [brochure3, brochure4]}] 仅通过使

假设我们有以下模型:(简化)

  • 有两个集合“x”和“y”
  • 一个页面可以选择一些小册子,而不是全部
有没有办法得到这样一本小册子词典:

{'x': [brochure1, brochure2], 'y': [brochure3, brochure4]}
[{'collection': 'x', 'brochures': [brochure1, brochure2]}, {'collection': 'y', 'brochures': [brochure3, brochure4]}]
仅通过使用多对多管理器:

page_instance.brochures.all()
编辑

我想和页面相关的小册子一起工作。不是宣传册.objects.all()或集合\u实例.宣传册\u集。这就是为什么我包括页面

我找到了defaultdict,它帮助我做到这一点:

collection_brochures = defaultdict(list)
for b in self.brochures.all():
    collection_brochures[b.collection.slug].append(b)
事实上,这就是我问题的答案

我可以这样做,但理想的情况是列一张清单,上面写着这样的格言:

{'x': [brochure1, brochure2], 'y': [brochure3, brochure4]}
[{'collection': 'x', 'brochures': [brochure1, brochure2]}, {'collection': 'y', 'brochures': [brochure3, brochure4]}]

我希望这个代码片段能够完成这项工作

collection_brochures = defaultdict(list)
for b in self.brochures.all():
    collection_brochures[b.collection.slug].append(b)
result = []
for collection, brochures in collection_brochures.iteritems():
    result.append({'collection': collection, 'brochures': brochures})
此外,您还可以使用模型实例作为键,因此,如果您希望查看
集合
实例而不是它们的slug,您可以将第三行替换为这一行:

collection_brochures[b.collection].append(b)
这将为您提供以下数据:

[{'collection': collection_x, 'brochures': [brochure1, brochure2]},
 {'collection': collection_y, 'brochures': [brochure3, brochure4]}]

试着详细说明你的问题。看起来您需要一个字典,其中键是集合实例,值是该集合实例的列表。对吗?我不确定佩奇为什么会与此相关。